Проверка Spring MVC и JSR 303 приводит к ошибке 400

ХОРОШО. У меня есть метод контроллера Spring MVC, как показано ниже:

public String getInformationByGID(@ModelAttribute("geoInfoParam") @Valid GeoInfoParam geoInfoParam, Model model ,BindingResult result)

Класс GeoInfoParam определяет ряд входных данных с аннотированными проверками @NotNull, @Size, которые, как я ожидаю, будут выполняться при отправке формы (поскольку у меня есть @Valid с ModelAttribute). Но что произошло? Когда я нажимаю «Отправить», страница показывает мне ошибку 400 и не показывает никакой другой информации в журнале.


person bkrish    schedule 05.08.2014    source источник


Ответы (1)


Я отладил поток выполнения и обнаружил, что org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.java (который является частью выполнения HandlerAdapter).handleBindException вызывается, когда нет BindingResult, за которым следует ModelAttribute, и этот метод устанавливает ответ с кодом 400 . Урок, который я усвоил: если у вас есть форма (ModelAttribute), аннотированная @Valid, убедитесь, что за ней немедленно следует BindingResult. Итак, я изменил сигнатуру метода контроллера, как показано ниже:

public String getInformationByGID(@ModelAttribute("geoInfoParam") @Valid GeoInfoParam geoInfoParam, BindingResult result, Model model)

Дурак я. Теперь все в порядке. Надеюсь, это поможет кому-то.

NB: я использую Spring MVC 3.2.8 и валидатор Hibernate 4.2.0 final

person bkrish    schedule 05.08.2014
comment
Спасибо тебе за это! Вы спасли меня от прыжка с моста! РЖУ НЕ МОГУ! Но теперь мне интересно, как проверить два или более ModelAtributes одновременно (у меня есть случай, когда мне нужно сохранить две сущности). - person kazbeel; 23.09.2014