Java hibernate验证程序在版本4和5中引发不同的异常
我正在做一个带有自定义异常映射的SpringBootREST应用程序。异常映射与此无关,但我希望在版本4中使用hibernate validator(因为我必须使用java验证api版本1.0) 现在我正在初始化@configuration类中的验证器:Java hibernate验证程序在版本4和5中引发不同的异常,java,spring-boot,bean-validation,nhibernate-validator,Java,Spring Boot,Bean Validation,Nhibernate Validator,我正在做一个带有自定义异常映射的SpringBootREST应用程序。异常映射与此无关,但我希望在版本4中使用hibernate validator(因为我必须使用java验证api版本1.0) 现在我正在初始化@configuration类中的验证器: @Bean public Validator validator() { return new LocalValidatorFactoryBean(); } @Bean MethodValidationPostProcesso
@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 version 5+,我会得到一个适当的javax.validation.ConstraintViolationException,并且我可以提取未验证字段的完整列表
问题是:
1.如果我只是做错了什么,Hibernate validator 4就是这样
2.如果我可以使用spring中的某个东西来验证并忘记hibernate validator,它会正确地执行吗?spring提供了自己的验证接口,因此您可以直接尝试使用这些接口。文档是。您可以使用
BindingResult
查看产生的验证错误的详细信息。您知道h吗如何在Spring Rest控制器方法上自动调用ExecutableValidator
?这是处理@RequestParam
&@PathVariable
值所必需的。@Sabirkan您的意思是您只想验证PathVariable和requestParams?然后我的方法就可以工作了,只需在您的参数上添加验证注释即可