1

我正在做一个带有自定义异常映射的 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 会正确执行吗?

4

1 回答 1

2

Spring 提供了自己的验证接口,因此您可以尝试直接使用它们。文档在这里。您可以使用 aBindingResult查看生成的验证错误的详细信息。

于 2017-05-25T21:06:36.387 回答