Spring form Walidacja pola ModelAttribute, aby uniknąć błędu 400 Bad Request
MamArticleFormModel
zawierające dane wysłane normalniehtml form
który jest wstrzykiwany przez Spring@ModelAttribute
adnotacja, tj.
@RequestMapping(value="edit", method=RequestMethod.POST)
public ModelAndView acceptEdit(@ModelAttribute ArticleFormModel model,
HttpServletRequest request, BindingResult errors)
{
//irrelevant stuff
}
Wszystko działa do pewnego stopnia doskonale. Problem polega na tym, żeArticleFormModel
zawiera adouble
pole (protected
, ustaw za pomocą normalnego setera). Wszystko działa dobrze, dopóki dane wysłane przez użytkownika są liczbą. Kiedy wpisują słowo, wszystko, co dostaję, to400 Bad Request Http Error
.
Zarejestrowałem jużWebDataBinder
dla tego kontrolera
@InitBinder
protected void initBinder(WebDataBinder binder) throws ServletException
{
binder.setValidator(validator);
}
gdzievalidator
jest instancją implementującą klasę niestandardowąorg.springframework.validation.Validator
interfejs, ale nie wiem co dalej. Chciałbym móc analizować model, uzyskać poprawną odpowiedź HTTP i wyświetlić komunikat o błędzie w formularzu. TheinitBinder()
metoda jest wywoływana i mogę zadzwonićvalidator.validate()
z tego, ale nie zmienia błędu (dla tych błędnych danych).
Wiem, że mogłem użyć setera do parsowania łańcucha, sprawdzić, czy jest to liczba, jeśli nie, zapisać tę informację w zmiennej, a następnie pobrać tę zmienną podczas walidacji, ale wydaje się, że to zbyt dużo pracy. Musi istnieć łatwiejszy sposób wymuszenia typu na polu bez błędu. Ponadto problem dotyczy powiązania danych, a nie sprawdzania poprawności, więc uważam, że powinien on zostać umieszczony w odpowiedniej warstwie kodu.
Myślałem też o wdrożeniujava.beans.PropertyEditor
i wołaniebinder.registerCustomEditor()
, ale brakuje mi wiarygodnego źródła wiedzy.
Sprawdzanie poprawności po stronie klienta (sprawdzanie, czy dane są numerowane przez JavaScript) nie jest możliwe.
TL; DR:
Jak mogę wymusić, aby pole było określonego typu dla a@ModelAttribute
przedmiot bez dostania400 Bad Request Http Error
?