首頁 >Java >Bean Validation API,可以動態指示驗證器忽略 POJO 特定欄位上的特定約束註釋

Bean Validation API,可以動態指示驗證器忽略 POJO 特定欄位上的特定約束註釋

王林
王林轉載
2024-02-08 22:51:22862瀏覽

php小編子墨在這篇文章中將為大家介紹Bean Validation API,並且重點討論它的一個重要特性-動態指示驗證器忽略POJO特定欄位上的特定約束註解。 Bean Validation API是一種在Java應用程式中進行資料驗證的標準方式,它透過註解的方式提供了一種簡單且靈活的方法來定義和應用驗證規則。而動態指示驗證器忽略特定欄位上的約束註釋,則為開發人員提供了更高的靈活性和可控性,使得在特定場景下可以靈活地調整驗證規則,從而提高程式碼的可維護性和擴展性。接下來,我們將深入探討這項特性的使用方法和實際應用情境。

問題內容

我有一個 pojo,其中一些欄位用 @notempty 註解:

public class sampleforminputdto {

  @notempty
  private string textarea;

  private int myint = 0;

  @notempty
  private string mytext = "somevalue";

  public string gettextarea() {
    return textarea;
  }

  public void settextarea(string textarea) {
    this.textarea = textarea;
  }
}

目的是檢查欄位以確保它們包含一個值,即不為 null 且不為空。

如果我使用無參數建構函式建立 sampleforminputdto 的實例,則欄位 textarea 最初將為 null,因此應該並且確實會按預期失敗驗證。

SampleFormInputDTO sampleFormInputDTO = new SampleFormInputDTO();

ValidatorFactory validatorFactory =
    Validation.byDefaultProvider()
        .configure()
        .messageInterpolator(new ParameterMessageInterpolator())
        .buildValidatorFactory();

Validator validator = validatorFactory.getValidator(sampleFormInputDTO);

Set<ConstraintViolation<SampleFormInputDTO>> violationSet = validator.validate();

我想知道是否可以動態/以程式設計方式指示驗證器實例不驗證特定欄位的特定約束註解?

假設我已確定,作為處理 rest api 呼叫的一部分,我希望 sampleforminputdto 類型的欄位 textarea 動態允許空字串,但僅限於該特定欄位。不影響同一 pojo 中其他欄位上可能存在的任何約束註解。

這可能嗎?

解決方法

您可能想要查看驗證群組

public class sampleforminputdto {

  @notempty(groups = group1.class)
  private string textarea;

  private int myint = 0;

  @notempty
  private string mytext = "somevalue";

  public string gettextarea() {
    return textarea;
  }

  public void settextarea(string textarea) {
    this.textarea = textarea;
  }
}

然後您可以控制哪些約束包含在驗證中,哪些約束不包含在驗證中,例如:

validator.validate(sampleforminputdto);

只會檢查 mytext 屬性,但會類似:

validator.validate(sampleFormInputDTO, Group1.class, Default.class);

將驗證兩者。

以上是Bean Validation API,可以動態指示驗證器忽略 POJO 特定欄位上的特定約束註釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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