Проверка типа JSR-303 перед переплетом - PullRequest
12 голосов
/ 03 ноября 2010

модель ....

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

файл бобов ....

<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, но это не работает с целыми числами

1 Ответ

25 голосов
/ 03 ноября 2010

Как вы упомянули, вам нужно удобное сообщение в messages.properties. Вы можете использовать один из следующих кодов сообщений (с разными уровнями избирательности):

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

Кроме того, если вы не знаете код сообщения, вы можете просто напечатать BindingResult - его toString() возвращает полное описание ошибок привязки.

...