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

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

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

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

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 validator 4.2.0 final

licensed under cc by-sa 3.0 with attribution.