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.