2016-03-23 16 views
28

Spring unterstützt zwei verschiedene Validierungsmethoden: Spring-Validierung und JSR-303-Bean-Validierung. Beides kann verwendet werden, indem ein Spring-Validator definiert wird, der an andere Delegierer einschließlich des Bean-Validators delegiert. So weit, ist es gut.Unterschied zwischen @Valid und @Validated im Frühjahr

Aber wenn Methoden notieren, um Validierung tatsächlich zu beantragen, ist es eine andere Geschichte. Ich kann wie dieses

@RequestMapping(value = "/object", method = RequestMethod.POST) 
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) { 

mit Anmerkungen versehen oder ähnliche

@RequestMapping(value = "/object", method = RequestMethod.POST) 
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) { 

Hier @Valid ist javax.validation.Valid und @Validated ist org.springframework.validation.annotation.Validated. Die Dokumente für letzteres sagen

Variante von JSR-303 Gültig, unterstützt die Spezifikation der Validierung Gruppen. Entwickelt für die bequeme Verwendung mit Spring JSR-303 Unterstützung aber nicht JSR-303 spezifisch.

was nicht viel hilft, weil es nicht genau sagt, wie es anders ist. Wenn überhaupt. Beide scheinen für mich ziemlich gut zu funktionieren.

+1

Könnte interessant sein: http://stackoverflow.com/questions/18911154/how-to-specify-validation-group-for-valid –

+1

_ "Unterstützung der Spezifikation von Validierungsgruppen" _ ist eine sehr explizite Aussage. – zeroflagL

+0

Ich sollte denken, dass Valid eng mit JSR 303 Validierungen (NotNull, etc) gekoppelt ist. Sie können jedoch andere Validierungen/Gruppen erstellen und in Validated überprüfen lassen. – Atul

Antwort

25

Wie Sie in der Dokumentation zitiert haben, wurde @Validated hinzugefügt, um "Validierungsgruppen" zu unterstützen, d. H. Eine Gruppe von Feldern in der validierten Bean. Dies kann in mehrstufigen Formularen verwendet werden, in denen Sie Name, E-Mail usw. im ersten Schritt und dann weitere Felder in folgenden Schritten validieren können.

Der Grund, warum dies nicht in @Valid Annotation hinzugefügt wurde, ist, dass es mit dem Java-Community-Prozess (JSR-303) standardisiert ist, die Zeit braucht und Spring-Entwickler wollten, dass Benutzer diese Funktionalität früher verwenden können.

Gehen Sie zu this jira ticket, um zu sehen, wie die Annotation zustande kam.

Verwandte Themen