Использование @Valid против @Validated весной - PullRequest
0 голосов
/ 29 июня 2019

Благодаря этому вопросу мне кажется, я понимаю, как работает валидация.

Что касается JPA, здесь у нас есть спецификация под названием JSR-303, объясняющая, как должна работать Bean Validation, а затеммы также используем такие реализации, как обычно используемый Hibernate Validator или Apache BVal.

Я пытаюсь использовать @Valid в какой-то части моего кода.Я не использую @Validated, потому что мне не нужна проверка группы.

Вы можете найти пример демонстрационного проекта здесь

В классе PropertyExample вывидно, что я пометил свой класс для проверки бина.

При использовании @Validated все работает как положено, так как я нарушаю ограничение в своем файле application.yml.При использовании @Valid сверх @Validated, кажется, ничего не происходит.Я не понимаю, почему.

Я также видел, что эти аннотации можно использовать для ElementType.PARAMETER, но когда я использую их во время инициализации конструктора, проверка, похоже, тоже не срабатывает.

Разъяснение того, как использовать эти аннотации (особенно @Valid), будет с благодарностью.

1 Ответ

1 голос
/ 29 июня 2019

Работает при использовании Validated и не при использовании Valid просто потому, что Spring Boot требует, чтобы классы свойств были аннотированы с помощью Validated, если вы хотите, чтобы они были проверены.См. Документацию :

. Spring Boot пытается проверять классы @ConfigurationProperties всякий раз, когда они снабжены аннотацией @Validated Spring

[...]

Вы также можете запустить проверку, аннотируя метод @Bean, который создает свойства конфигурации с помощью @ Validated.

Обратите внимание, что они не могут разрешить использование Valid для классов свойств, посколькуДопустимая аннотация неприменима к классам.

...