Programmatische Bean-Validierung (JSR 303) ohne Annotation [duplizieren]

8

Ich habe diese zusammengesetzte Constraint-Annotation (nur zur Veranschaulichung):

%Vor%

Und ich verwende es in Spring Controllers und Entity-Klassen.

Aber jetzt muss ich eine einzelne Zeichenfolge in einer Service-Methode überprüfen, wo ich die gleiche Einschränkung auf eine einzelne Zeichenfolge anwenden muss. Aufgrund der Tatsache, dass die Einschränkung die gleiche ist, möchte ich die gleiche Definition der Einschränkung (@PasswordComplexity) (einzige Quelle der Wahrheit) verwenden. Etwas wie:

%Vor%

Aber ich weiß nicht, wie ich den JSR 303 Validator für ein nicht annotiertes einfaches Objekt (String) ausführen soll. Ist es zumindest möglich und wie?

(Ich verwende den Hibernate Validator als JSR 303 Provider)

    
Ralph 10.06.2011, 07:40
quelle

1 Antwort

2

Eine Möglichkeit wäre, einen vollständigen benutzerdefinierten Validator zu schreiben und die Logik in die Klasse mit der Annotation zu schieben, die nur den Validator verwendet. Das würde bedeuten, dass Sie dann eine unabhängige Kompilierungseinheit (A full class PasswordComplexityValidator implements implements ConstraintValidator<PasswordComplexity, String> ... ) hätten, die Sie unabhängig von der Annotation verwenden könnten. Dieser Ansatz würde es auch für Sie einfacher machen, die Validierung in einem Unit-Test zu testen.

Da Sie die Annotation jedoch zum Konfigurieren des vorhandenen Regex-Validators verwenden, der von Hibernate bereitgestellt wird, können Sie diesen stattdessen verwenden und das konstante Muster aus der Annotationsklasse übergeben. Sie sollten auch in der Lage sein, Ihre Längenbeschränkung in die Regex zu packen, was einfacher und schneller wäre, als beide Annotationen trotzdem zu haben.

    
Simon Elliston Ball 10.06.2011, 09:10
quelle