首頁  >  文章  >  在 Hibernate Validator 中插入訊息時如何存取實例變數?

在 Hibernate Validator 中插入訊息時如何存取實例變數?

WBOY
WBOY轉載
2024-02-14 13:42:09729瀏覽

在 Hibernate Validator 中,我們經常需要自訂驗證訊息。有時,我們需要存取實例變數來動態地產生訊息。那麼,在 Hibernate Validator 中,如何存取實例變數呢?首先,我們需要在驗證註解中使用佔位符來引用實例變數。然後,在訊息資源檔案中,我們可以使用"{}"來取得實例變數的值。透過這種方式,我們可以靈活地插入實例變數的值,從而產生個人化的驗證訊息。在本文中,php小編魚仔將為您詳細介紹在 Hibernate Validator 中插入訊息時如何存取實例變數。

問題內容

當使用 crudrepository::save 將物件插入儲存庫時,我使用 hibernate validator 和 spring 來驗證物件。假設我們有課:

public class Person {
  public int id;

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

}

我希望內插訊息能夠存取 person 實例的所有字段,例如id 字段,然後像「${id}」或「${this.id}」一樣存取它們。文件提到了一些關於能夠存取所有 bean 屬性的內容,但我猜它只能與類別級約束一起使用。

是否有某種方法可以在不訴諸類別層級約束的情況下做到這一點?

解決方法

約束驗證器無法存取欄位本身以外的任何資訊。因此,換句話說,沒有辦法存取同級欄位。這與約束的範圍有關。這樣看:

@NotBlank
public String name;

非空的 name 可以是個人字段,也可以是公司或其他類別中的字段。它與 @notblank 所在位置沒有區別。

因此,正如您在問題中所建議的那樣,為了在插入訊息時訪問其他類別字段,約束應該處於類別層級... 為了不建立大量自訂約束,您可以考慮查看 @scriptassert

另請注意,constraintviolationexception 包含constraintviolation 列表,從中您應該能夠存取葉bean (getleafbean()) 或根bean (getrootbean ()),並取得您的資訊拋出異常後需要。

以上是在 Hibernate Validator 中插入訊息時如何存取實例變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除