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?
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
.
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.