Ich habe einen benutzerdefinierten Bean-Validator, der prüft, ob ein bestimmtes Feld in einer Entität für einige Bedingungen eindeutig ist. Wenn die Validierung fehlschlägt, sollte die Nachricht ein Feld (z. B. die ID) der bereits existierenden Entität enthalten. So sollte zum Beispiel die Nachricht sein:
%Vor%Ist dies mit der Bean-Validierung möglich?
AFAICS, das Nachrichtenformat kann Parameter enthalten wie:
%Vor%Dies kann jedoch nur auf die "statischen" Attribute der Validierungsannotation verweisen, in diesem Fall:
%Vor% In meinem Fall ist der Wert nur in isValid
meines benutzerdefinierten Validators bekannt.
Sie haben Recht !, und für was Sie wollen !, können Sie in der isValid () -Methode eine Constraint-Verletzungsmeldung erstellen. Zu diesem Zweck sollte die Annotation der Abhängigkeiten für bestimmte Klassen spezifisch sein, auf die sie angewendet wurde, und es sollte sich um Validierungseinschränkungen auf Klassenebene handeln. Innerhalb von isValid können Sie vor dem Zurückgeben von false bei fehlgeschlagener Validierung eine Nachricht erstellen, die den Wert der Klasseninstanz enthält. Zum Beispiel:
%Vor%Aber ich denke, dass Sie dies mit Anmerkungen auf Feldebene machen wollen! Ich habe keine Ahnung davon, ich freue mich auf Ihre Ergebnisse.
Es ist nicht wirklich die schönste Lösung, aber was wir am Ende getan haben, war, unseren Top-Level-Code für Ausnahmebehandlungen wie folgt hinzuzufügen:
%Vor% Beachten Sie, dass PrimaryKeyed
eine benutzerdefinierte Schnittstelle ist, die für unsere Entitäten verwendet wird. Wir haben auch einige andere Schnittstellen und benutzerdefinierte Handhabung oben nicht gezeigt.
Tags und Links java java-ee bean-validation