任何方式获得@RequestParam的BindingResult?

Ole*_*eev 7 java validation spring spring-mvc

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

我只有一个int表单字段.当我在做的时候

void doSmth(MyForm form, BindingResult bindingResult) throws ... {
  int bindErrors = bindingResult.getErrorCount())
  ...
Run Code Online (Sandbox Code Playgroud)

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

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

我正在将代码更改为:

void doSmth(@RequestParam int userId, BindingResult bindingResult) ... {
  int bindErrors = bindingResult.getErrorCount())
  ...
Run Code Online (Sandbox Code Playgroud)

并在浏览器中获取Portlet不可用的消息和此异常:

org.springframework.web.portlet.FrameworkPortlet processRequest无法完成请求org.springframework.beans.TypeMismatchException:无法将类型'java.lang.String'的值转换为必需的类型'int'; 嵌套异常是java.lang.NumberFormatException:对于输入字符串:"q"

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

Ral*_*lph 5

Spring 参考仅允许对命令或表单对象使用 BindingResult。

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

(15.3.2.3 支持的处理程序方法参数和返回类型)

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

或者将单个int命令对象包装在命令对象中,并使用该对象上的绑定结果(可以在此处找到示例:/sf/answers/938520411/