我的控制器中有一个带有不同参数的 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) {
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器.java :
public class MyController implements MyInterface {
@Override
public String getMyParam(String name, String surname) { return name + surname; }
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用“ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
另一件事是参数的@NotNull注释surname是多余的。默认情况下需要该参数。如果你希望它是可选的,那么它必须是这样的Optional类型:
@Get(value = "/bob/{name}/params")
String getMyParam(String name, @QueryValue Optional<String> surname) {
return name + surname.orElse("");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5682 次 |
| 最近记录: |