Форма Spring ModelAt, проверка поля дани, чтобы избежать ошибки 400 Bad Request
У меня естьArticleFormModel
содержащие данные, отправленные обычным способомhtml form
который впрыскивается Spring с помощью@ModelAttribute
аннотации, т.е.
@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
HttpServletRequest request, BindingResult errors)
{
//irrelevant stuff
}
Все работает прекрасно до некоторой степени. Проблема в том, чтоArticleFormModel
содержитdouble
поле (protected
, установите с помощью обычного установщика). Все работает нормально, пока данные, отправленные пользователем, являются числом. Когда они набирают слово, я получаю только400 Bad Request Http Error
.
Я уже зарегистрировалWebDataBinder
для этого контроллера
@InitBinder
protected void initBinder(WebDataBinder binder) throws ServletException
{
binder.setValidator(validator);
}
гдеvalidator
является экземпляром пользовательского класса, реализующегоorg.springframework.validation.Validator
интерфейс, но я не знаю, что делать дальше. Я хотел бы иметь возможность проанализировать модель, получить действительный ответ HTTP и отобразить сообщение об ошибке в форме.initBinder()
метод вызывается, и я могу позвонитьvalidator.validate()
от этого, но это не меняет ошибку (для этих неправильных данных).
Я знаю, что я мог бы использовать установщик для анализа строки, проверить, является ли это число, если нет, сохранить эту информацию в переменной, а затем извлечь эту переменную во время проверки, но это, кажется, слишком много работы. Должен быть более простой способ принудительного ввода типа в поле без получения ошибки. Кроме того, проблема заключается в привязке данных, а не в проверке, поэтому я считаю, что они должны быть размещены на соответствующем уровне кода.
Я также думал о реализацииjava.beans.PropertyEditor
и звонитbinder.registerCustomEditor()
Мне не хватает надежного источника знаний.
Проверка на стороне клиента (проверка, являются ли данные числовыми через JavaScript), невозможна.
TL; DR:
Как я могу заставить поле быть определенного типа для@ModelAttribute
пункт без получения400 Bad Request Http Error
?