使用 Micronaut 进行多个获取请求参数 @PathVariable 和 @RequestAttribute?

2024-01-03

我的控制器中有一个具有不同参数的 get 函数:

我的接口.java:

public interface MyInterface {

   @Get(value = "/bob/{name}/params?surname={surname}")
   String getMyParam (
   @Parameter(name="name", required=true)
   @PathVariable("name") String name, 
   @NotNull 
   @Parameter(name="surname", required=true) 
   @Valid 
   @RequestAttribute(value="surname") String surname) {

   }
}

mycontroller.java:

public class MyController implements MyInterface {

   @Override
   public String getMyParam(String name, String surname) { return name + surname; }
}

但当我打电话时“http://localhost:8080/bob/marley/params?surname=lion http://localhost:8080/bob/marley/params?surname=lion“它发送一条错误消息:找不到页面。

当我使用可选参数时/books{?max,offset}是工作。我错过了什么?

在执行查询请求时 PathVariable 和 RequestAttribute 是否不可混合?

EDIT 1

当我删除?surname=={surname}从 @Get 值中,出现“HttpClientResponseException:未指定需要参数 [String surname]”。


surname在您的情况下不是请求属性而是查询值(参数)。所以使用@QueryValue注释而不是@RequestAttribute并且不要在 URL 模式中指定它。

因此控制器的实现可以如下所示:

@Controller
public class MyController {
    @Get(value = "/bob/{name}/params")
    String getMyParam(String name, @QueryValue String surname) {
        return name + surname;
    }
}

另一件事是@NotNull注释为surname参数是多余的。默认情况下需要该参数。如果您希望它作为可选的那么它必须是Optional像这样输入:

@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue Optional<String> surname) {
    return name + surname.orElse("");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Micronaut 进行多个获取请求参数 @PathVariable 和 @RequestAttribute? 的相关文章

随机推荐