有什么方法可以获得@RequestParam的BindingResult?

时间:2012-01-26 14:00:07

标签: java spring spring-mvc validation

我正在使用Spring 3 Portlet MVC。只是MVC中的验证/绑定应该是相同的。

我只有一个int表单字段。当我在做什么

void doSmth(MyForm form, BindingResult bindingResult) throws ... {
  int bindErrors = bindingResult.getErrorCount())
  ...

并提交一个无法解析为int的字段值,此方法将被执行,bindErrors为1.此方法接收的表单字段值为0.这很好。

但是创建一个仅包含单个字段的表单并不是很好。

我正在将代码更改为:

void doSmth(@RequestParam int userId, BindingResult bindingResult) ... {
  int bindErrors = bindingResult.getErrorCount())
  ...

并在浏览器中获取 Portlet not available 消息,此异常:

  

org.springframework.web.portlet.FrameworkPortlet processRequest可以   不完整的要求                                    org.springframework.beans.TypeMismatchException:无法转换   类型'java.lang.String'的值为必需类型'int';嵌套   异常是java.lang.NumberFormatException:对于输入字符串:“q”

问题:即使@RequestParam类型转换失败,有没有办法继续执行方法并处理绑定错误?我尝试不要求@RequestParam并为其提供默认值 - 没有帮助。

1 个答案:

答案 0 :(得分:3)

Spring引用只允许BindingResult用于命令或表单对象。

  

org.springframework.validation.Errors / org.springframework.validation.BindingResult前面的命令或表单对象的验证结果(紧接在前的方法参数)。

(15.3.2.3 Supported handler method arguments and return types)

所以你可能需要自己实现它。

或者将单个int包装在命令对象中并使用此对象的绑定结果(可在此处找到示例:https://stackoverflow.com/a/13407434/280244