2017-02-08 3 views
0

Wir verwenden die Java EE 7 mit Wildfly 10.0. In den letzten Tagen lerne ich eine Menge der Bean-Validierung, die in der Java EE 7-Spezifikation enthalten ist. Es klingt vielversprechend, da ich viele Vorteile bei der Verwendung von Anmerkungen für Validierungen einschließlich Wiederverwendbarkeit und saubereren Code sehe.ConstraintViolation von Hibernate Validator neu definieren

Der javax.validation.Validator gibt jedoch einen Satz ConstraintViolations zurück.

Nun hat die ConstraintViolation eine Nachricht, die Sie mit getMesssage() erhalten können. Der Typ der Nachricht ist ein String.

Für unsere Fehlerbehandlung verwenden wir jedoch einen benutzerdefinierten Typ, den wir erstellt Pair<int, String>, um Nachricht an den Client einschließlich Fehlercode und eine Nachricht zurückgeben.

Hier ist ein Beispiel dafür, wie unsere Paare wie folgt aussehen:

public static final Pair<Integer, String> NAME_VALIDATION_ERROR = new Pair<Integer, String>(
      201,  "Name must contain only letters"); 

Nun ist dies alles in eine Klasse namens ErrorStrings und es ist einfach, weil diese Klasse statische Methoden enthält zu verwenden, und wenn Sie mit der Eingabe ErrorStrings. starten Sie die Autocomplete gibt Ihnen die Namen der Fehlerpaare, die Sie verwenden können. Zum Beispiel NAME_VALIDATION_ERROR.

Also, was wäre der einfachste Weg, Pair<int, String> zu ConstraintViolation hinzuzufügen, so dass es verwendet werden kann, um die Antwort an den Client zurückzugeben, ohne Komplexität zu dem Code hinzuzufügen.

I thougth eine Hashmap<String, Pair<int, String>> zum ErrorStrings Klasse hinzuzufügen, und unter Verwendung eines message definiert in ConstraintViolation als Schlüssel, aber das wäre viel Komplexität zu dieser Klasse hinzufügen, wie Sie ein Paar ändern müssten und eine hashmap, wenn Sie möchten, um einen Fehler zu ändern oder hinzuzufügen.

Ich verwende einen Hibernate-Validator, der eine Standardimplementierung für Jave EE ist, aber ich bin bereit, jede andere Implementierung zu verwenden. Ich würde gerne den einfachsten Weg wissen, um ConstraintViolation neu zu definieren, so dass es Pair<int, String> drin hat.

Antwort

0

Die „einfachste“ Weg, ich weiß, dass Sie Ihre eigene custom contraints schaffen sollten, die benutzerdefinierte ConstraintViolation Implementierungen werfen würde, die auch eine public Pair<Integer, String> getMessagePair() Verfahren haben könnte. Dies wäre jedoch noch komplexer, da Sie jede einzelne Validierung neu implementieren müssten.

Persönlich würde ich die Übersetzung von String zu Pair<Integer, String> in einer neuen ErrorStringTranslator Klasse tun. Dies ist eine etwas sauberere Lösung als die, die Sie erwähnt haben, aber Sie erspart Ihnen nicht die Komplexität der Aufgabe.

Verwandte Themen