micronaut - 多个获取请求参数@PathVariable 和@RequestAttribute 与Micronaut?
问题描述
我的控制器中有一个带有不同参数的 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 ”时,它会发送一条错误消息:找不到页面。
当我使用可选参数/books{?max,offset}
时,它就可以工作。我错过了什么?
执行查询请求时 PathVariable 和 RequestAttribute 是否不可混合?
编辑 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("");
}
推荐阅读
- javascript - 如果表格被隐藏,Javascript将表格位置向上移动
- xamarin.forms - ReactiveUI Observable 作为 Prism 中的 Property Helper 等价物?
- c++ - 如何有条件地实例化一个对象?
- sql - 自动将数据从 API 更新到 SQL 数据库?
- html - 在 HTML 中创建一个重定向到另一个页面的按钮
- c# - 如何使用星号制作垂直直方图?
- python-3.x - 确定用户输入的类型的程序
- google-apps-script - onSelectionChange Google App 脚本根本不起作用
- python - Python 有限状态机上的无效语法
- python - 使用 Edgetpu 编译器为 Tensorflow 编译时出错