0

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

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

是否有任何更改可以在我无法更改的类上使用 BeanValidation 框架?如同:

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

2 回答 2

2

正如 mvb13 所回答的,您可以为此使用基于 XML 的配置。如果您使用 Hibernate Validator 作为 BV 提供者,您还可以利用API 进行编程约束声明

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();  
于 2013-10-23T13:29:51.230 回答
0

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

于 2013-10-23T08:24:02.847 回答