Rumah  >  Artikel  >  API Pengesahan Kacang untuk mengarahkan pengesah secara dinamik untuk mengabaikan anotasi kekangan tertentu pada medan tertentu POJO

API Pengesahan Kacang untuk mengarahkan pengesah secara dinamik untuk mengabaikan anotasi kekangan tertentu pada medan tertentu POJO

王林
王林ke hadapan
2024-02-08 22:51:22751semak imbas

Editor PHP Zimo akan memperkenalkan anda kepada API Pengesahan Kacang dalam artikel ini, dan menumpukan pada salah satu ciri pentingnya - secara dinamik mengarahkan pengesah untuk mengabaikan anotasi kekangan tertentu pada medan tertentu POJO. API Pengesahan Bean ialah cara standard untuk melaksanakan pengesahan data dalam aplikasi Java Ia menyediakan cara yang mudah dan fleksibel untuk mentakrif dan menggunakan peraturan pengesahan melalui anotasi. Mengarahkan pengesah secara dinamik untuk mengabaikan anotasi kekangan pada medan tertentu memberikan pembangun dengan fleksibiliti dan kebolehkawalan yang lebih besar, membolehkan peraturan pengesahan dilaraskan secara fleksibel dalam senario tertentu, dengan itu meningkatkan kebolehselenggaraan dan pengembangan jantina. Seterusnya, kami akan menyelidiki cara menggunakan ciri ini dan senario aplikasi praktikal.

Kandungan soalan

Saya mempunyai pojo di mana beberapa medan dianotasi dengan @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;
  }
}

Tujuannya adalah untuk menyemak medan untuk memastikan ia mengandungi nilai, iaitu tidak batal dan tidak kosong.

Jika saya menciptanya menggunakan pembina tanpa parameter sampleforminputdto 的实例,则字段 textarea pada mulanya akan menjadi batal dan oleh itu harus dan gagal pengesahan seperti yang diharapkan.

SampleFormInputDTO sampleFormInputDTO = new SampleFormInputDTO();

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

Validator validator = validatorFactory.getValidator(sampleFormInputDTO);

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

Saya tertanya-tanya sama ada mungkin untuk mengarahkan contoh pengesah secara dinamik/program supaya tidak mengesahkan anotasi kekangan khusus untuk medan tertentu?

Katakan saya telah menentukan bahawa sebagai sebahagian daripada mengendalikan panggilan api rehat, saya mahu sampleforminputdto 类型的字段 textarea membenarkan rentetan kosong secara dinamik, tetapi hanya untuk medan tertentu itu. Tidak menjejaskan sebarang anotasi kekangan yang mungkin wujud pada medan lain dalam pojo yang sama.

Adakah ini mungkin?

Penyelesaian

Anda mungkin ingin melihat Kumpulan Pengesahan.

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;
  }
}

Anda kemudiannya boleh mengawal kekangan mana yang disertakan dalam pengesahan dan yang tidak termasuk dalam pengesahan, contohnya:

validator.validate(sampleforminputdto);

hanya akan menyemak atribut mytext, tetapi akan kelihatan seperti:

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

Akan mengesahkan kedua-duanya.

Atas ialah kandungan terperinci API Pengesahan Kacang untuk mengarahkan pengesah secara dinamik untuk mengabaikan anotasi kekangan tertentu pada medan tertentu POJO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam