2017-06-18 2 views
0

Ich entwickle Spring-Boot-Anwendung, ich muss Benutzerinformationen überprüfen, bevor Sie andere Informationen überprüfen. Dies ist ein Ausschnitt:Anfrage an @Valid

@RequestMapping(value = "/create-user", method = RequestMethod.POST) 
public String ceateCustomer(@Valid @RequestBody User user){ 
     myService.create(user); 
} 

Wenn der Benutzer von einer anderen Route kommt /create-sp-Benutzer, ich habe wieder gültig der Benutzer:

@RequestMapping(value = "/create-sp-user", method = RequestMethod.POST) 
    public String ceateCustomer(@Valid @RequestBody User user){ 
     user.setSp(true); 
     // I tried @Valid user without success 
     // In my User class if sp = true the field telNumber is mandatory 
     myService.create(user); 
} 

Würden Sie irgendwelche Ideen?

Mit freundlichen Grüßen

+1

Sie können einfach Ihren eigenen benutzerdefinierten Validator schreiben, da es keinen Standardvalitator gibt, der auf der Grundlage des Wertes anderer nach erforderlichen Feldern sucht. –

+0

Entschuldigung, ich verstehe nicht, was Sie wollen. Wie kommt die Benutzerstruktur vom Kunden? Oder möchten Sie den Benutzer ** bestätigen ** nachdem Sie sp = true gesetzt haben? In diesem Fall sollten Sie Ihren benutzerdefinierten Validator wie hier beschrieben schreiben: https://stackoverflow.com/questions/12146298/spring-mvc-how-to-perform-validation - die @valid-Annotation prüft sie ** vor * * Irgendein Code wird in der Steuerung ausgeführt. – Dominik

+0

Danke @Dominik ja ich muss den Benutzer nach dem Set SP auf True validieren – Olivier

Antwort

0

Wie Dominik sagte, validiert @Valid Annotation das Objekt vor jedem Code in der Steuerung ausgeführt wird

Wenn Sie das Objekt in der Methode validieren mögen, sollten Sie benutzerdefinierten Validator verwenden.

Implementieren Sie org.springframework.validation.Validator und rufen Sie die validate Methode im Controller auf.

@RequestMapping(value = "/create-sp-user", method = RequestMethod.POST) 
    public String ceateCustomer(@Valid @RequestBody User user, BindingResult result){ 
     user.setSp(true); 
     CustomValidator customValidator = new CustomValidator(); 
     customValidator.validate(user, result); 

     if (result.hasErrors()){ 
     //do something 
     } else { 
     myService.create(user); 
     } 
} 
+0

danke @ Janar Ich habe versucht, Sie Lösung, aber ich habe die ganze Zeit 0 Fehler. – Olivier

+0

vielleicht haben Sie den Validator falsch implementiert? Bitte posten Sie Ihren Validator-Code. – Janar

+0

Hi @ Janar Ich arbeite mit @Olivier Dies ist die Validator-Klasse 'öffentliche Klasse UserValidator implementiert Validator { geschützt Logger Logger = LoggerFactory.getLogger (UserValidator.class); @Override öffentliche boolesche Unterstützung (Klasse clazz) { Rückgabe userInfo.class.equals (clazz); } @Override public void validate (Objektziel, Fehler Fehler) { Benutzer userInfo = (Benutzer-) Ziel; \t ... // Telefonnummer \t \t if (StringUtils.isBlank (userInfo.getPhoneNumber())) { \t \t \t errors.rejectValue ("phonenumber", "phonenumber [erforderlich]", "Fehler") ; \t \t} \t \t \t .. \t} } ' – Victor