一尘不染

绑定前的JSR-303类型检查

spring

模型....

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

beans file....

<mvc:annotation-driven />

controller....

@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);
     }

如何将“值”限制为仅数字?如果我输入的不是数字,则会出现此错误:

Failed to convert property value of type java.lang.String to required type java.lang.Integer for property value; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value “A” from type java.lang.String to type java.lang.Integer; nested exception is java.lang.IllegalArgumentException: Unable to parse A

我看到一些帖子提到了initBinding,但是我不确定如何使用它,或者它是否对我有帮助。这必须已经解决。有什么方法可以确保它在绑定之前是一个数字?

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

我尝试了@Pattern但在int上不起作用


阅读 327

收藏
2020-04-20

共1个答案

一尘不染

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

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

另外,当你不知道消息代码时,只需打印BindingResult-即可toString()返回绑定错误的完整说明。

2020-04-20