1

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

例如

public String getName();

public String getAddress();

public String getEmployerName();

public String getEmployerAddress();

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

我非常感谢您的回复。

4

1 回答 1

1

I'm not aware of ready-to-use solution for this, but you could use Hibernate Validator's API for programmatic constraint declaration for this purpose:

  • Determine all fields/getters of type String using reflection
  • For each of these fields/getters add the required constraint via the API

E.g. like this for the fields:

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();     
于 2013-05-10T21:24:00.510 回答