绑定前的JSR-303类型检查

时间:2010-11-02 23:09:07

标签: spring validation spring-mvc bean-validation

...模型

@Digits(integer=5, fraction=0, message="The value must be numeric and less than five digits")
private int value;

beans file ....

<mvc:annotation-driven />

...控制器

@RequestMapping(value = "/admin/save.htm", method = { RequestMethod.POST })
public ModelAndView saveSection(@Valid @ModelAttribute Section section, BindingResult result) {
     if(result.hasErrors())   {
         return new ModelAndView("admin/editSection", "section", section);
     }

如何将“价值”限制在数字范围内?如果我输入的不是数字,我会收到此错误:

  

无法转换属性值   输入java.lang.String到必需的类型   java.lang.Integer属性   值;嵌套异常是   org.springframework.core.convert.ConversionFailedException:   无法从类型转换值“A”   要键入的java.lang.String   java.lang.Integer中;嵌套异常是   java.lang.IllegalArgumentException异常:   无法解析A

我看过一些提到initBinding的帖子,但我不确定如何使用它,或者它是否会帮助我。这必须在以前解决。有没有办法确保它在绑定之前是一个数字?

或者,如果有人可以发布正确的messages.properties条目来覆盖此错误,那么这对我也有用。

我试过@Pattern,但这不适用于ints

1 个答案:

答案 0 :(得分:25)

正如您所提到的,您需要messages.properties中的用户友好消息。您可以使用以下消息代码之一(具有不同的选择性级别):

  • typeMismatch.section.value
  • typeMismatch.value
  • typeMismatch.int
  • typeMismatch

此外,当您不知道消息代码时,您只需打印BindingResult - 其toString()将返回绑定错误的完整描述。