我正在使用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
注释它应该使用我配置的验证器?
答案 0 :(得分:1)
您使用的是哪个REST框架?根据具体实施情况,可以以这种或那种方式注入ValidatorFactory
。
最简单的方法是不自行引导验证器,而是让REST框架执行它,应用META-INF/validation.xml(“默认验证器工厂”)的配置。您可以在该XML文件和约束映射文件中设置消息插补器和许多其他内容,它可能包含在内。