抛出ConstraintViolationException时如何获取经过验证的字段名称而不是arg0

时间:2019-04-08 15:19:32

标签: java spring-boot validation

我正在使用Spring @Validated批注来验证Get Request Path变量。我确实抛出了ConstraintViolationException,该异常是在@ControllerAdvice类中处理的,但是问题是我想要字段的名称,并且我正在获取arg0而不是名称本身(myField)

我知道我也有类似的问题,但我尝试了以下方法,但没有解决。

我已经尝试遍历异常

Point<V>()

以及使用-parameters进行编译(在pom.xml中)

        for (Iterator<ConstraintViolation<?>> iterator = set.iterator(); iterator.hasNext(); ) {
            ConstraintViolation<?> next =  iterator.next();
            System.out.println(((PathImpl)next.getPropertyPath())
                    .getLeafNode().getName() + "  " +next.getMessage());
        }

还要为验证器创建一个配置文件,如下所示:

                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <forceJavacCompilerUse>true</forceJavacCompilerUse>
                    <compilerArgs>
                        <arg>-parameters</arg>

这是我正在验证的方法

        @Bean
        public Validator validator(){
            final ValidatorFactory validatorFactory = Validation.byDefaultProvider()
                    .configure()
                    .parameterNameProvider(new ReflectionParameterNameProvider())
                    .buildValidatorFactory();
            return validatorFactory.getValidator();
        }

但是毕竟,当检查异常对象时,我仍然得到arg0。 在Spring Boot 1.5中使用Java 8

1 个答案:

答案 0 :(得分:0)

(以防万一将来有人遇到这个问题,我想在这里分享我的发现)

最后,我注意到我在我的Application类中注入了@Validator 返回Validation.buildDefaultValidatorFactory()。getValidator();

在我的案例中,这与Spring使用的验证器搞混了