Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot get validation working with Spring Boot and Thymeleaf

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?

like image 439
Wim Deblauwe Avatar asked May 18 '15 07:05

Wim Deblauwe


People also ask

How do I add validation to Thymeleaf?

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.

How do I validate my email with Thymeleaf?

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.

How do I enable Thymeleaf in Spring boot?

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.


1 Answers

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.

like image 142
Wim Deblauwe Avatar answered Oct 25 '22 05:10

Wim Deblauwe