我的控制器中有一个具有不同参数的 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(使用前将#替换为@)