Подтвердить что ты не робот

Проверка типа JSR-303 перед привязкой

модель....

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

beans файл....

<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

4b9b3361

Ответ 1

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

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

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