如何在外部对象上使用beanvalidation?

时间:2013-10-23 08:17:09

标签: java validation bean-validation

我想在一个大对象上使用像@NotNull, @Size等BeanValidation机制。我只想验证我使用的某些属性。

该对象来自外部库,因此我无法为其getter添加注释。我也不想手动创建自己的对象并制作项目的深层副本。

我是否可以在类无法更改的类上使用BeanValidation框架?类似于:

class MyValidator {
    @NotNull
    static String getUsername(ExternalClass ext) {
         return ext.getUser();
    }
}

2 个答案:

答案 0 :(得分:2)

正如mvb13所说,您可以使用基于XML的配置。如果您正在使用Hibernate Validator作为您的BV提供商,您还可以利用API for programmatic constraint declaration

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

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

constraintMapping
    .type( ExternalClass.class )
        .property( "someProperty", FIELD )
            .constraint( new NotNullDef() )
            .constraint( new SizeDef().min( 2 ).max( 14 ) )
    .type( AnotherExternalClass.class )
        .property( "anotherProperty", METHOD )
            .constraint( new NotNullDef() );

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

答案 1 :(得分:0)

存在使用xml config描述验证规则的变体。这是它在Hibernate https://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-xmlconfiguration.html中实现的方式 在这种情况下,您无需更改源代码。