Spring unterstützt zwei verschiedene Validierungsmethoden: Spring-Validierung und JSR-303-Bean-Validierung. Beide können verwendet werden, indem ein Spring-Validator definiert wird, der an andere Delegatoren delegiert, einschließlich des Bean-Validators. So weit, ist es gut.
Wenn Sie jedoch Methoden mit Anmerkungen versehen, um tatsächlich eine Validierung anzufordern, ist dies eine andere Geschichte. Ich kann so kommentieren
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
oder so
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Hier ist @Valid javax.validation.Valid und @Validated ist org.springframework.validation.annotation.Validated . Die Dokumente für letztere sagen
Variante von JSR-303 Valid, die die Angabe von Validierungsgruppen unterstützt. Entwickelt für die bequeme Verwendung mit der JSR-303-Unterstützung von Spring, jedoch nicht JSR-303-spezifisch.
Das hilft nicht viel, weil es nicht genau sagt, wie es anders ist. Wenn überhaupt. Beide scheinen für mich ziemlich gut zu funktionieren.
quelle
Antworten:
Wie Sie aus der Dokumentation zitiert haben,
@Validated
wurde hinzugefügt, um "Validierungsgruppen" zu unterstützen, dh eine Gruppe von Feldern in der validierten Bean. Dies kann in mehrstufigen Formularen verwendet werden, in denen Sie im ersten Schritt Name, E-Mail usw. und in den folgenden Schritten andere Felder überprüfen können.Der Grund, warum dies nicht in die
@Valid
Annotation aufgenommen wurde, liegt darin, dass es mithilfe des Java-Community-Prozesses (JSR-303) standardisiert wird, was einige Zeit in Anspruch nimmt, und Spring-Entwickler wollten den Benutzern ermöglichen, diese Funktionalität früher zu verwenden.Gehen Sie zu diesem Jira-Ticket, um zu sehen, wie die Anmerkung entstanden ist.
quelle
Eine direktere Antwort. Für diejenigen, die noch nicht wissen, was in aller Welt "Validierungsgruppe" ist .
Verwendung zur
@Valid
ValidierungRegler:
Formularobjekt:
Verwendung für
@Validated
ValidierungsgruppenQuelle: http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html
Regler:
Formularobjekt:
quelle
Im Beispiel Code-Schnipsel der Frage,
@Valid
und@Validated
machen keinen Unterschied. Wenn das@RequestBody
jedoch mit einemList
Objekt oder einem Zeichenfolgenwert versehen ist@RequestParam
, wird die Validierung nicht wirksam.Wir können die
@Validated
Validierungsfunktion auf Methodenebene verwenden, damit es funktioniert. Um dies zu erreichen, ist es wichtig,@Validated
die Klasse zu platzieren. Dies kann ein weiterer wichtiger Unterschied zwischen@Valid
und@Validated
im Frühjahrsrahmen sein.Erfrischung
quelle
List
Objekte hat? Ich gehe davon aus, dass dies auch für andere Sammlungen nicht funktioniert wieMap
? Vielleicht könnten Sie mir eine ausführlichere Erklärung in meiner Frage geben: stackoverflow.com/questions/60167961/…Außerdem können Sie nur für
@Valid
eine Domäne / ein Feld eine verschachtelte Validierung beantragen , nicht für eine@validated
.quelle