我正在做一个带有自定义异常映射的 spring boot rest 应用程序。异常映射无关紧要,但我想在版本 4 中使用休眠验证器((因为我必须使用 java 验证 api 版本 1.0)。
现在我正在初始化 @configuration 类中的验证器:
@Bean
public Validator validator() {
return new LocalValidatorFactoryBean();
}
@Bean
MethodValidationPostProcessor methodValidationPostProcessor(Validator validator) {
MethodValidationPostProcessor processor = new MethodValidationPostProcessor();
processor.setValidator(validator);
return processor;
}
我创建了一个资源:
@Path("/validation")
@Produces("application/json")
@Validated
public interface ValidationTestResource {
@POST
@Path("/test")
@Validated
public void translatedAndMappedException(@RequestBody @Valid
ValidationTestDto testDto);
}
}
该资源有效。并且验证有效。但是每当我违反 ValidationTestDto 的约束时,我都会遇到异常。但是,这是org.hibernate.validator.method.MethodConstraintViolationException,它只指定了哪个方法和哪个参数无法验证(translatedAndMappedException,参数 testDto)。这使得返回违反的字段列表变得毫无用处,因为这样的列表不存在。
但是如果我使用 hibernate-validator 版本 5+,我会得到一个正确的javax.validation.ConstraintViolationException并且我可以提取未验证的字段的完整列表。
问题是:
1.如果我只是做错了什么,而Hibernate验证器4就是这样。
2.如果我可以使用 spring 中的某些东西来验证并忘记 hibernate-validator 会正确执行吗?