Gibt es eine Standardmethode zum Aktivieren der JSR 303 Bean Validation mithilfe von annotierten Methodenargumenten?

8

Ich habe mich schon eine Weile umgeschaut, ohne Glück. Ich verwende MVC nicht , möchte aber @javax.validation.Valid verwenden, um die Validierung von Methodenargumenten zu aktivieren. Um ein Beispiel zu geben

%Vor%

Mit MVC wird dies für @Controller annotierte Beans mit einem einfachen <mvc:annotation-driven/> aktiviert (siehe 5.7.4.3 Konfigurieren eines JSR-303 Validators für die Verwendung durch Spring MVC ).

Die Verwendung von AOP sollte ziemlich trivial sein. Trotzdem vermute ich, dass es einen Standardweg gibt. Daher die Frage: Gibt es eine ähnliche Sache für Nicht-MVC-Anwendungen und Nicht-Controller-Beans, um die Eingabeüberprüfung für annotierte Beans zu ermöglichen?

    
sfussenegger 04.02.2011, 16:03
quelle

2 Antworten

6

Die Validierung auf Methodenebene ist nicht Teil der Bean-Validierungsspezifikation (JSR 303). Die Validierung auf Methodenebene ist ein Vorschlag in der Spezifikation, die in Anhang C hinzugefügt wurde.

Hibernate Validator 4.2 (eine Beta ist bereits out) implementiert diesen Vorschlag und ermöglicht es, JSR 303 Annotationen zu Methodenparametern und Rückgabewerten zu platzieren. Natürlich brauchen Sie noch etwas Federleim-Code, aber das sollte nicht zu schwer sein.

Auch Bean Validation 1.1 wird die Validierung auf Methodenebene offiziell zur Spezifikation hinzufügen (nicht nur als Anhang / Empfehlung). Siehe auch Ссылка

    
Hardy 05.02.2011, 14:29
quelle
3
  

Mit MVC ist dies für annotierte Beans @Controller aktiviert

@Valid ist nur eine Markierung in Controller-Beans, die den Code, der die Validierung durchführt, versteckt und alle Constraint-Verletzungen in Errors auf eine nette Art und Weise darstellt. Spring-Designer könnten ihre eigene Annotation erfunden haben, um dasselbe zu tun.

Die tatsächliche Verwendung der Annotation @Valid erfolgt in der Klasse (Bean), die Sie mit dem Validator von JSR 303 validieren, und ihre primäre Verwendung besteht darin, das Objektgraph zu validieren. Bedeutung eine Bohne kann andere haben Bean-Referenzen mit @Valid-Annotation, um die Validierung rekursiv auszulösen.

Außerhalb des MVC können Sie den konfigurierten Validator verwenden, um alle Bean zu validieren, die JSR 303-Annotationen verwenden. Im Gegensatz zu dem gut bestückten Errors im Controller müssen Sie selbst entscheiden, was Sie mit Constraint-Verletzungen machen wollen / p>

Um Ihre Frage zu beantworten, gibt es keinen Standardweg. Um die gleiche Darstellung wie in einem Controller zu erhalten, könnten Sie die @Valid-Annotation verwenden (oder eine neue erstellen), um AOP-Hinweise zur Validierung einer Bean auszuführen und einen 'ViolationCollector' (etwas wie Fehler in MVC) zu füllen, der an a übergeben werden muss Methode.

    
Ritesh 05.02.2011 00:32
quelle