请求uri中的冒号是什么



在Micronaut应用程序中编写了一个端点,如下所示:

@Post("/{someId}:verb")

我想从POSTMAN向它发出POST请求,但不确定我是如何做到的?到目前为止,我已经尝试过:

POST http://localhost:8080/1234/verb // 404 (Not Found)
POST http://localhost:8080/1234:verb // this combines ':' with 1234 and that in turn fails that @Pattern validation that I have placed. 
POST http://localhost:8080/1234 // 405 (Method Not Allowed)

我引用了Micronaut文档(我添加的突出显示(:

请记住,要在占位符表达式中指定默认值,您应该使用冒号:字符,但是如果您是如果尝试指定有冒号,则应使用转义该值背后的滴答声。

因此,如果未设置someId,则可能需要将verb替换为默认值。

当在POST请求中提供someId时,该方法将使用someId。否则,它将使用默认值,根据您的示例,该值为verb。因此,如果您使用POSTMAN进行测试,请设置id或将其留空,以测试默认值。

我希望我没有误解你的问题(-->你不是在寻找someId的默认值吗?(,但以下代码适用于cURL(someId可以是字符串或整数-你更喜欢什么(:

package com.example;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.PathVariable;
import io.micronaut.http.annotation.Post;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller("/")
public class DemoController {
private static final Logger logger = LoggerFactory.getLogger(DemoController.class);
@Post(value = "/{someId}:verb", produces = MediaType.TEXT_PLAIN)
public String postMethod(@PathVariable String someId) {
String message = "You called me with the value: " + someId;
logger.info(message);
return message;
}
}

cURL:

.curl.exe -X POST http://localhost:8080/WeLoveCake42:verb
.curl.exe -X POST http://localhost:8080/12345678:verb

输出:

20:14:42.027 [default-nioEventLoopGroup-1-5] INFO  com.example.DemoController - You called me with the value: WeLoveCake42
20:15:37.989 [default-nioEventLoopGroup-1-7] INFO  com.example.DemoController - You called me with the value: 12345678

万一我误解了你的问题:

  • 我在@PathVariable上使用defaultValue时运气不佳
  • 我没有运气使值someId@Nullable

我想路由/调度程序不够灵活,无法检测到这种模式(也许它甚至可能导致非确定性行为,所以这是可以理解的(。

最新更新