web-dev-qa-db-fra.com

Impossible d'obtenir une validation avec Spring Boot et Thymeleaf

J'ai une application Spring Boot (utilisant la version 1.2.3) avec 1 contrôleur qui affiche un formulaire. Tout cela fonctionne bien, mais je veux maintenant ajouter une validation. J'ai cette méthode dans mon contrôleur:

@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 je tape maintenant quelque chose d'invalide, je reçois la "page d'erreur Whitelabel" après l'envoi et mon point d'arrêt dans la méthode n'est jamais touché (si je supprime l'annotation @Valid, le point d'arrêt est touché). La page d'erreur montre:

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 semble remarquer que l’objet n’est pas valide, mais il n’affiche plus le formulaire afin que l’utilisateur puisse réparer son erreur. Qu'est-ce que je fais mal?

18
Wim Deblauwe

Trouvé la réponse en raison de le tutoriel ici . Je dois changer ma signature de méthode de:

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
Model model, 
BindingResult bindingResult )

à:

public String doRegistration( @Valid CustomerLicenseRegistration customerLicenseRegistration, 
BindingResult bindingResult, 
Model model )

Notez que la BindingResult doit être immédiatement après l'objet annoté avec @Valid.

53
Wim Deblauwe

Dans mon cas, il s’agissait d’une mauvaise saisie dans la zone de saisie. En fait, j’ai entré "-" caractère spécial dans la zone de saisiequi génère la même erreur - La validation a échoué pour objet = 'événements'. Nombre d'erreurs: 5 . Je l'ai résolu en entrant les valeurs numerical/String.

0
Abhishek Singh