配置提供给@Valid的验证器以进行消息插值

时间:2016-01-08 14:33:57

标签: jax-rs bean-validation hibernate-validator

我正在使用hibernate验证器:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>5.1.2.Final</version>
</dependency>

在我的单元测试中,它可以正常使用它:

  private static Validator validator;

  validator = ValidatorProvider.getInstance().getValidator();

将验证器配置为消息插值:

public class ValidatorProvider {

    static ValidatorProvider INSTANCE;
    Validator validator;

    private ValidatorProvider() {
        CustomMessageInterpolator messageInterpolator = new CustomMessageInterpolator();
        ValidatorFactory validatorFactory
                = Validation.byProvider(HibernateValidator.class).configure()
                .messageInterpolator(messageInterpolator).buildValidatorFactory();
        validator = validatorFactory.getValidator();
    }

    public static ValidatorProvider getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new ValidatorProvider();
        }
        return INSTANCE;
    }

    public Validator getValidator() {
        return validator;
    }
}

集成测试未使用上述单例。

现在,在我的REST控制器中,我只有@Valid注释:

@Valid Answer answer

目前,有以下消息:

javax.validation.constraints.Pattern.message=The "{0}" value must match "{regexp}".
在集成测试中使用

时不进行插值。

如何告诉上面的@Valid注释它应该使用我配置的验证器?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个REST框架?根据具体实施情况,可以以这种或那种方式注入ValidatorFactory

最简单的方法是不自行引导验证器,而是让REST框架执行它,应用META-INF/validation.xml(“默认验证器工厂”)的配置。您可以在该XML文件和约束映射文件中设置消息插补器和许多其他内容,它可能包含在内。