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

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

我可以对无法更改的类使用BeanValidation框架吗?相似:

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

最佳答案

正如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();

07-26 02:27