Проверка 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 ошибок и не показала другую информацию в журнале.
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)
Дурак я. Теперь все хорошо. Надеюсь, это кому-нибудь поможет.
Примечание: я использую Spring MVC 3.2.8 и Hibernate validator 4.2.0 final