it-swarm.com.de

Validierung kann nicht mit Spring Boot und Thymeleaf ausgeführt werden

Ich habe eine Spring Boot-Anwendung (Version 1.2.3) mit 1 Controller, die ein Formular anzeigt. Das alles funktioniert gut, aber jetzt möchte ich die Validierung hinzufügen. Ich habe diese Methode in meinem 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";
}

Wenn ich jetzt etwas ungültiges eingebe, erhalte ich nach dem Senden die "Whitelabel-Fehlerseite" und mein Haltepunkt in der Methode wird nie getroffen (Wenn ich die @Valid-Annotation entferne, wird der Haltepunkt getroffen). Die Fehlerseite zeigt:

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 scheint zu bemerken, dass das Objekt nicht gültig ist, aber das Formular wird nicht erneut angezeigt, sodass der Benutzer seinen Fehler beheben kann. Was mache ich falsch?

18
Wim Deblauwe

Die Antwort wegen des Tutorials hier gefunden . Ich muss meine Methodensignatur ändern von:

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

zu:

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

Beachten Sie, wie BindingResultsofort nach dem Objekt sein muss, das ich mit @Valid kommentiert habe.

53
Wim Deblauwe

In meinem Fall war es eine falsche Eingabe in das Eingabefeld. Eigentlich habe ich "-" Sonderzeichen in das Eingabefeld eingegeben was den gleichen Fehler auslöst - Überprüfung für Objekt = 'Ereignisse' fehlgeschlagen. Fehleranzahl: 5 . Ich habe es durch Eingabe von numerical/String -Werten aufgelöst.

0
Abhishek Singh