I have a Spring Boot application (using version 1.2.3) with 1 controller that shows a form. This all works fine, but now I want to add validation. I have this method in my controller:
@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"; }
If I now type something invalid, I get the "Whitelabel error page" after submit and my breakpoint inside the method is never hit (If I remove the @Valid
annotation, the breakpoint does get hit). The error page shows:
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 seems to notice that the object is not valid, but it does not show the form again so the user can fix his mistake. What am I doing wrong?
Click Dependencies and select Spring Web, Thymeleaf, and Validation. Click Generate. Download the resulting ZIP file, which is an archive of a web application that is configured with your choices.
1 Answer. Show activity on this post. Use type="email" instead of text . Use required if you would like the input field as mandatory input.
1.1. Spring Boot will provide auto-configuration for Thymeleaf. Add spring-boot-starter-thymeleaf dependency in pom. xml to enable this auto-configuration. No other configurations required, Spring Boot will inject all required configuration to work with Thymeleaf.
Found the answer due to the tutorial here. I have to change my method signature from:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, Model model, BindingResult bindingResult )
to:
public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, BindingResult bindingResult, Model model )
Notice how the BindingResult
has to be immediately after the object I have annotated with @Valid
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With