Я использую аннотацию 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
(На всякий случай, если кто-то столкнется с этой проблемой в будущем, я хочу поделиться своими выводами здесь)
В конце концов, я заметил, что вводил @Validator в свой класс приложения. return Validation.buildDefaultValidatorFactory().getValidator();
В моем случае это было связано с валидатором, используемым Spring.
У меня такая же проблема после обновления версии Spring Boot с 2.2.13 до 2.5.6. Я не могу настроить запуск тестов при разрешении имен параметров...