Wim Deblauwe
Wim Deblauwe

Reputation: 26878

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?

Upvotes: 26

Views: 27705

Answers (2)

Wim Deblauwe
Wim Deblauwe

Reputation: 26878

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.

Upvotes: 78

Abhishek Singh
Abhishek Singh

Reputation: 625

In my case it was wrong input to the input box. Actually i entered "-" special character in the input box which throws same error -Validation failed for object='events'. Error count: 5. I resolved it by entering numerical/String values.

Upvotes: 0

Related Questions