java - mvc - No se puede obtener la validación trabajando con Spring Boot y Thymeleaf
spring mvc validation bindingresult (1)
Tengo una aplicación Spring Boot (usando la versión 1.2.3) con 1 controlador que muestra un formulario. Todo esto funciona bien, pero ahora quiero agregar validación. Tengo este método en mi controlador:
@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";
}
Si ahora escribo algo no válido, aparece la "página de error de Whitelabel" después de enviar y mi punto de interrupción dentro del método nunca se golpea (si @Valid
anotación @Valid
, se llega al punto de interrupción). La página de error muestra:
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 parece darse cuenta de que el objeto no es válido, pero no muestra el formulario nuevamente para que el usuario pueda corregir su error. ¿Qué estoy haciendo mal?
Encontré la respuesta debido al tutorial aquí . Tengo que cambiar la firma de mi método de:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
Model model,
BindingResult bindingResult )
a:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration,
BindingResult bindingResult,
Model model )
Observe cómo el BindingResult
debe estar inmediatamente después del objeto que he anotado con @Valid
.