Не удается получить валидацию с помощью Spring Boot and Thymeleaf
У меня есть приложение загрузки Spring (с использованием версии 1.2.3) с 1 контроллером, который показывает форму. Все это прекрасно работает, но теперь я хочу добавить подтверждение. У меня есть этот метод в контроллере:
@RequestMapping(value = "/licensing", method = RequestMethod.POST)
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, Model model, BindingResult bindingResult )
{
if( bindingResult.hasErrors())
{
logger.debug( "There are errors! {}", bindingResult );
return "customer/license-registration";
}
logger.debug( "customerLicenseRegistration: " + customerLicenseRegistration );
CustomerLicense customerLicense = m_licenseService.createCustomerLicense( customerLicenseRegistration );
model.addAttribute( "customerLicense", customerLicense );
return "customer/license-registration-done";
}
Если я сейчас напечатаю что-то недействительное, я получаю "страницу ошибок Whitelabel" после отправки, и моя точка останова внутри метода никогда не ударяется (если я удалю аннотацию @Valid
, точка останова попадет). На странице с ошибкой отображается:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon May 18 09:42:27 CEST 2015
There was an unexpected error (type=Bad Request, status=400).
Validation failed for object='customerLicenseRegistration'. Error count: 1
Spring, похоже, заметил, что объект недействителен, но он еще не отображает форму, чтобы пользователь мог исправить свою ошибку. Что я делаю неправильно?
Ответы
Ответ 1
Нашел ответ из учебника здесь. Я должен изменить свою подпись метода:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
Model model,
BindingResult bindingResult )
в
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
BindingResult bindingResult,
Model model )
Обратите внимание, что BindingResult
должен быть сразу после объекта, который я аннотировал с помощью @Valid
.