每个属性jsr303上的默认注释

时间:2013-05-10 18:37:29

标签: hibernate bean-validation

我正在使用jsr303验证用户输入。我想知道是否有一种方法可以默认在类的所有属性上添加注释。

例如

public String getName();

public String getAddress();

public String getEmployerName();

public String getEmployerAddress();

现在我没有将所有这些注释为@NotNull / @NotBlank,而是在寻找一种方法,如果我可以默认在所有返回String的属性上设置此验证检查。我正在寻找这样的东西的唯一原因是,我认为更容易忘记将这个注释放在任何属性上,从而打开一个bug。

我非常感谢您的回复。

1 个答案:

答案 0 :(得分:1)

我不知道现成的解决方案,但您可以为programmatic constraint declaration使用Hibernate Validator的API来实现此目的:

  • 使用反射
  • 确定String类型的所有字段/ getter
  • 对于每个字段/ getter,通过API
  • 添加所需的约束

E.g。像这样的字段:

List<Field> stringFields = ...;

HibernateValidatorConfiguration configuration = Validation
        .byProvider( HibernateValidator.class )
        .configure();

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

for(Field field : stringFields) {
    constraintMapping
        .type( MyBean.class )
        .property( field.getName(), FIELD )
            .constraint( new NotNullDef() )
            .constraint( new NotBlankDef() );
}

Validator validator = configuration.addMapping( constraintMapping )
        .buildValidatorFactory()
        .getValidator();