Spring 如何指定@ModelAttribute端点允许使用哪些参数
我们有一个端点,如:Spring 如何指定@ModelAttribute端点允许使用哪些参数,spring,spring-mvc,Spring,Spring Mvc,我们有一个端点,如: @Secured(Roles.USER) @ResponseStatus(value=HttpStatus.OK) @RequestMapping(value="/test", method=RequestMethod.GET , produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody void test(@ModelAttribute BigCriteria criteria, @
@Secured(Roles.USER)
@ResponseStatus(value=HttpStatus.OK)
@RequestMapping(value="/test", method=RequestMethod.GET , produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody void test(@ModelAttribute BigCriteria criteria,
@RequestParam(value="param1",required=false) String param1){
logger.debug(criteria.getParam1());
logger.debug(criteria.getParam2());
}
其中BigCriteria类似于:
public class BigCriteria{
private String param1;
private String param2;
private String param3;
...
//plus getters and setters
}
调用/测试时?param1=ok输出为:
好啊
空的
调用/测试时?param1=ok¶m2=ok输出为:
好啊
ok
@ModelAttribute
和@RequestParam
参数由spring MVC单独设置。因此@RequestParam(value=“param1”,required=false)String param1
仅设置字符串param1
,前提是请求中存在param1,但对@modeltribute BigCriteria标准没有影响
如果要限制用于支持标准的参数,应使用InitBinder
注释方法为定义的ModelAttribute设置允许的字段
@InitBinder("bigCriteria")
public void initBinder(WebDataBinder binder) {
binder.setAllowedFields("param1");
}
...
@RequestMapping(value="/test", method=RequestMethod.GET , produces=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody void test(@ModelAttribute("bigCriteria") BigCriteria criteria,
@RequestParam(value="param1",required=false) String param1){
logger.debug(criteria.getParam1());
logger.debug(criteria.getParam2());
}
我在modeldattribute
上使用了一个名称,表示上面初始化的WebDataBinder
仅用于该modeldattribute
尝试更改requestparam的名称这是一个很好的答案,您知道一种只允许字段指定为查询参数的方法吗?不确定是否理解您的最后一个问题。它们从何而来?是的,例如:使用setAllowedfields只能使用我在该控制器中作为@RequestParam注释的字段,以便自动执行该操作。@ramon_salla恐怕这不是Spring框架的逻辑。你最好像春天的小伙子们希望你做的那样使用它;-)