我们正在使用Spring MVC 3.2.3.RELEASE(注释)和谷歌应用引擎1.8.0。
我们添加了一个StringTrimmerEditor,用于将表单中的空字符串转换为空值,并且工作正常,但作为副作用,所有在控制器中使用@RequestParams的方法都希望填充所有@RequestParams,否则它们会抛出http错误400.我们尝试使用不同的@RequestParam设置,如(required = false)和(defaultValue =“some value”),但它无效。
这是我们如何使用它
@ControllerAdvice
public class ControllerSetup
{
@InitBinder
public void initBinder ( WebDataBinder binder )
{
StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);
binder.registerCustomEditor(String.class, stringtrimmer);
}
}
控制器
@RequestMapping(value="/addreportitems", method=RequestMethod.POST)
public String saveEditForm(@ModelAttribute DCReport dcReport,
@ModelAttribute("loggedInEmployee") Employee someEmployee,
@RequestParam Integer someInteger,
Model m) {
....
}
如果我们不在表单中添加someInteger,则会出错 错误400必需整数参数'someInteger'不存在
如果我们删除StringTrimmer,它完全正常,我们在这里遗漏了什么吗?非常感谢您提前帮忙。
答案 0 :(得分:1)
以下内容对我有用:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
@ResponseBody
@RequestMapping("/foo")
public String renderFoo(@RequestParam(required=false) String bar) {
return bar;
}
当您使用required=false
进行测试时,您肯定在某处犯了错误。