Как получить проверенное имя поля, а не arg0, когда выдается ConstraintViolationException

Я использую аннотацию Spring @Validated для проверки переменной пути запроса на получение. Я получаю исключение 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

У меня такая же проблема после обновления версии Spring Boot с 2.2.13 до 2.5.6. Я не могу настроить запуск тестов при разрешении имен параметров...

Esteban 15.11.2021 14:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
833
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

В моем случае это было связано с валидатором, используемым Spring.

Другие вопросы по теме