我的控制器中有一个具有不同参数的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:要求参数[String surname]未指定”。
答案 0 :(得分:0)
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("");
}