Heim >Java >Wie greife ich beim Einfügen von Nachrichten in Hibernate Validator auf Instanzvariablen zu?

Wie greife ich beim Einfügen von Nachrichten in Hibernate Validator auf Instanzvariablen zu?

WBOY
WBOYnach vorne
2024-02-14 13:42:09750Durchsuche

Im Hibernate Validator müssen wir häufig Validierungsnachrichten anpassen. Manchmal müssen wir auf Instanzvariablen zugreifen, um Nachrichten dynamisch zu generieren. Wie greife ich also auf Instanzvariablen im Hibernate Validator zu? Zunächst müssen wir Platzhalter in der Validierungsanmerkung verwenden, um auf die Instanzvariablen zu verweisen. Dann können wir in der Nachrichtenressourcendatei „{}“ verwenden, um den Wert der Instanzvariablen abzurufen. Auf diese Weise können wir die Werte von Instanzvariablen flexibel einfügen, um personalisierte Validierungsnachrichten zu generieren. In diesem Artikel stellt Ihnen der PHP-Editor Yuzai ausführlich vor, wie Sie beim Einfügen von Nachrichten in Hibernate Validator auf Instanzvariablen zugreifen.

Frageninhalt

Wenn ich ein Objekt mit crudrepository::save in das Repository einfüge, verwende ich den Hibernate-Validator und Spring, um das Objekt zu validieren. Angenommen, wir haben eine Klasse:

public class Person {
  public int id;

  @NotBlank(message="User with id: ${id} is missing name")
  public String name;

}

Ich möchte, dass die interpolierte Nachricht auf alle Felder der Personeninstanz zugreifen kann, beispielsweise auf das ID-Feld, und dann auf sie wie „${id}“ oder „${this.id}“ zugreifen kann. In der Dokumentation wird etwas darüber erwähnt, dass man auf alle Bean-Eigenschaften zugreifen kann, aber ich vermute, dass es nur mit Einschränkungen auf Klassenebene funktioniert.

Gibt es eine Möglichkeit, dies zu tun, ohne auf Einschränkungen auf Klassenebene zurückzugreifen?

Workaround

Constraint-Validatoren können nicht auf Informationen außerhalb des Feldes selbst zugreifen. Mit anderen Worten: Es gibt keine Möglichkeit, auf gleichgeordnete Felder zuzugreifen. Dies hängt mit dem Umfang der Einschränkung zusammen. Betrachten Sie es so:

@NotBlank
public String name;
Es gibt keinen Unterschied in der Position von

nicht leer name 可以是个人字段,也可以是公司或其他类中的字段。它与 @notblank.

Um also beim Einfügen von Nachrichten auf andere Klassenfelder zugreifen zu können, sollten die Einschränkungen, wie Sie in Ihrer Frage vorgeschlagen haben, auf Klassenebene liegen ... Um nicht viele benutzerdefinierte Einschränkungen zu schaffen, sollten Sie einen Blick auf @scriptassert werfen.

Beachten Sie auch das constraintviolationexception 包含 constraintviolation 列表,从中您应该能够访问叶 bean (getleafbean()) 或根 bean (getrootbean()) und erhalten Sie die Informationen, die Sie benötigen, nachdem Sie die Ausnahme ausgelöst haben.

Das obige ist der detaillierte Inhalt vonWie greife ich beim Einfügen von Nachrichten in Hibernate Validator auf Instanzvariablen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen