使用 Micronaut 获取多个请求参数@PathVariable 和@RequestAttribute?
Multiple get request parameters @PathVariable and @RequestAttribute with Micronaut?
我的控制器中有一个具有不同参数的 get 函数:
myinterface.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
当我从 @Get 值中删除 ?surname=={surname}
时,会出现 "HttpClientResponseException: Require argument [String surname] not specified".
surname
在你的例子中不是请求属性而是查询值(参数)。所以使用 @QueryValue
注释而不是 @RequestAttribute
并且不要在 URL 模式中指定它。
所以控制器实现可以如下所示:
@Controller
public class MyController {
@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue String surname) {
return name + surname;
}
}
另一件事是 surname
参数的 @NotNull
注释是多余的。默认情况下需要该参数。如果您希望它是可选的,那么它必须是 Optional
类型,如下所示:
@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue Optional<String> surname) {
return name + surname.orElse("");
}
我的控制器中有一个具有不同参数的 get 函数:
myinterface.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
当我从 @Get 值中删除 ?surname=={surname}
时,会出现 "HttpClientResponseException: Require argument [String surname] not specified".
surname
在你的例子中不是请求属性而是查询值(参数)。所以使用 @QueryValue
注释而不是 @RequestAttribute
并且不要在 URL 模式中指定它。
所以控制器实现可以如下所示:
@Controller
public class MyController {
@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue String surname) {
return name + surname;
}
}
另一件事是 surname
参数的 @NotNull
注释是多余的。默认情况下需要该参数。如果您希望它是可选的,那么它必须是 Optional
类型,如下所示:
@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue Optional<String> surname) {
return name + surname.orElse("");
}