微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请求 uri 中的冒号是什么?

如何解决请求 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 文档(我添加的亮点):

请记住,要在占位符表达式中指定默认值, 你应该使用冒号 : 字符,但是如果你是默认的 试图指定有一个冒号,那么你应该用 回勾。

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

当您的 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.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

如果我误解了您的问题:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。