在spring mvc应用程序中动态地向hibernate验证器添加约束

时间:2014-02-07 01:19:13

标签: spring-mvc hibernate-validator

我在我的spring mvc app中使用了hibernate验证器。通过以下简单步骤,我可以进行验证。

  1. pom.xml更改以添加hibernate验证器。
  2. 使用一些约束对bean进行注释。
  3. 使用@Valid注释控制器方法参数。
  4. 处理MethodArgumentNotValidException
  5. 我不想将约束添加到bean中,而是想要动态地将它们添加到bean中。这种动态添加需要在应用程序启动期间发生,只需一次。

    在hibernate验证器文档中,我看到以下代码段。

    constraintMapping.type( Car.class ).property( "manufacturer", FIELD ).constraint( new NotNullDef() )
    

    我的问题是,如何获得此ConstraintMapping实例的句柄?我看到Spring通过LocalValidatorFactoryBean实例化了hibernate验证器。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

你可以从 HibernateValidatorConfiguration - http://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html_single/#section-programmatic-api

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

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

constraintMapping
    .type( Car.class )
        .property( "manufacturer", FIELD )
            .constraint( new NotNullDef() )
        .property( "licensePlate", FIELD )
            .ignoreAnnotations()
            .constraint( new NotNullDef() )
            .constraint( new SizeDef().min( 2 ).max( 14 ) )
    .type( RentalCar.class )
        .property( "rentalStation", METHOD )
            .constraint( new NotNullDef() );

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

然而,这意味着您可能无法使用LocalValidatorFactoryBean,但您可能只能编写自己的。