JSR-303 Type Checking Before Binding

纵饮孤独 提交于 2019-11-26 22:52:52

问题


model....

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

How do I restrict "value" to just numerics? If I enter something other than a number, I get this error:

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

I have seen a few posts mention initBinding but I'm not sure how to use it or if it will even help me out. This has to have been solved before. Is there any way to ensure that it is a number before it gets binded?

Or, if someone could post the correct messages.properties entry to override this error, that could work for me too.

I tried @Pattern but that doesn't work on ints


回答1:


As you mentioned, you need a user-friendly message in messages.properties. You can use one of the following message codes (with different levels of selectivity):

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

Also, when you don't know message code, you can simply print the BindingResult - its toString() returns the full description of the binding errors.



来源:https://stackoverflow.com/questions/4082924/jsr-303-type-checking-before-binding

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!