我对以下行为感到困惑@RequestParam(value="someValue")
。
在里面docs https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html据说
使用控制器接口(例如,用于 AOP 代理)时,请确保一致地将所有映射注释(例如 @RequestMapping 和 @SessionAttributes)放在控制器接口上,而不是放在实现类上。
如果我放置@RequestParam
在我的控制器界面上value
被完全忽略(因此映射值是null
如果参数名称与接收到的参数名称不同),但是defaultValue
and required
工作正常。
如果我放置@RequestParam
在我的控制器实现上,一切正常。
I read this https://stackoverflow.com/questions/8002514/spring-mvc-annotated-controller-interface答案,但我无法理解为什么有些参数有效而其他参数无效以及为什么文档是错误的。
代码示例:
界面:
@RequestMapping(method = RequestMethod.GET)
List<MyObject> get(
//works if parameter in request has name "userName", which is not correct
@RequestParam(value = "username", required = false) String userName,
@RequestParam(value = "searchValue", required = false) String searchValue,
@RequestParam(value = "someId", required = false) Integer someId);
执行:
@Override
public List<MyObject> get(
String userName,
String searchValue,
Integer someId) {
return myService.get(userName, searchValue, someId);
}