Maison  >  Article  >  API de validation de bean pour demander dynamiquement au validateur d'ignorer les annotations de contrainte spécifiques sur des champs spécifiques d'un POJO

API de validation de bean pour demander dynamiquement au validateur d'ignorer les annotations de contrainte spécifiques sur des champs spécifiques d'un POJO

王林
王林avant
2024-02-08 22:51:22752parcourir

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

将验证两者。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer