我有一个带有某些字段(名字,姓氏,城市等)的实体对象。在一种情况下,我需要向该对象应用一组限制(非null,长度限制,唯一性等),而在另一种情况下,则应用另一组限制。目前,我正在使用自己的验证器,该验证器针对不同的用例具有不同的验证方法。
我可以通过其他方式(标准解决方案)执行验证吗?
我将Spring与Hibernate结合使用。在Hibernate中实现的JSR303标准无法解决我的问题,因为注释仅允许定义一组静态的限制。我无法在运行时重新定义它。
使用Hibernate Validator可以通过ConstraintMapping以编程方式构造约束:http : //docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/cfg/ConstraintMapping.html。可以找到文档http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/programmaticapi.html
ConstraintMapping mapping = new ConstraintMapping();
mapping.type( Car.class )
.property( "manufacturer", FIELD )
.constraint( NotNullDef.class )
.property( "licensePlate", FIELD )
.constraint( NotNullDef.class )
.constraint( SizeDef.class )
.min( 2 )
.max( 14 )
.property( "seatCount", FIELD )
.constraint( MinDef.class )
.value ( 2 )
.type( RentalCar.class )
.property( "rentalStation", METHOD)
.constraint( NotNullDef.class );
HibernateValidatorConfiguration config = Validation.byProvider( HibernateValidator.class ).configure();
config.addMapping( mapping );
ValidatorFactory factory = config.buildValidatorFactory();
Validator validator = factory.getValidator();
Run Code Online (Sandbox Code Playgroud)