Как получить проверенное имя поля, а не arg0, когда выбрасывается ConstraintViolationException - PullRequest
0 голосов
/ 08 апреля 2019

Я использую аннотацию Spring @Validated для проверки переменной пути запроса Get. Я получаю исключение ConstraintViolationException, которое я обрабатываю в классе @ControllerAdvice, но проблема в том, что мне нужно имя поля, и я получаю arg0 вместо самого имени (myField)

Я знаю, что у меня есть похожие вопросы, но я попробовал следующее, но ничего не решило.

Я уже пытался перебрать исключение

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

, а также компиляция с -параметрами (в pom.xml)

                <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();
        }

Это метод, который я проверяю

public void method(@RequestParam(value = "myField") @Pattern(regexp = "^([A-Za-z0-9]+)$", message = "is not valid") String myField)

Но, в конце концов, я все еще получаю arg0 при проверке объекта исключения. Использование Java 8 с Spring Boot 1.5

1 Ответ

0 голосов
/ 18 апреля 2019

(на случай, если в будущем кто-то столкнется с этой проблемой, я хочу поделиться своими выводами здесь)

В конце я заметил, что внедряю @Validator в свой класс Application, возвращаем Validation.buildDefaultValidatorFactory () .getValidator ();

Это пошло не так с валидатором, используемым Spring в моем случае

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...