【发布时间】:2015-12-11 17:18:33
【问题描述】:
我对@987654323@ 的行为感到困惑。 在docs 中据说
在使用控制器接口时(例如,用于 AOP 代理),请确保始终将所有映射注释 - 例如 @RequestMapping 和 @SessionAttributes - 放在控制器接口上而不是实现类上。
如果我将@RequestParam 放在我的控制器接口上,它的value 将被完全忽略(因此如果参数名称与接收到的参数名称不同,则映射值为null),但defaultValue 和required 有效好的。
如果我将@RequestParam 放在我的控制器实现中,一切正常。
我阅读了this 的答案,但我不明白为什么有些参数有效而其他参数无效,以及为什么文档有误。
代码示例:
界面:
@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);
}
【问题讨论】:
-
识别“默认值和必需”是什么意思?
-
@AdamSkywalker 如果我在我的界面上写
@RequestParam(defaultValue = "username", required = false),对应的参数总是值“用户名”
标签: java spring spring-mvc