Проверка формы SpringAttribute в форме Spring, чтобы избежать ошибки 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()
от этого, но это неизменить ошибку (для неправильных данных) .I '
я знаю, что я мог бы использовать установщик для разбора строки, проверьте, если этоЕсли число не сохранено, сохраните эту информацию в переменной, а затем извлеките эту переменную во время проверки, но это кажется слишком большой работой. Должен быть более простой способ принудительного ввода типа в поле без получения ошибки. Кроме того, проблема заключается в привязке данных, а не в проверке, поэтому я считаю, что они должны быть размещены на соответствующем уровне кода.
Я также думал о реализацииjava.beans.PropertyEditor
и звонитbinder.registerCustomEditor()
, но я'м не хватает надежного источника знаний.
Проверка на стороне клиента (проверка, является ли число номером с помощью JavaScript)Это возможно.
TL; DR:
Как я могу заставить поле быть определенного типа для@ModelAttribute
деталь без получения?400 Bad Request Http Error