@Valid
само по себе не имеет ничего общего с Spring.Это часть спецификации Bean Validation (есть несколько из них, последняя из которых - JSR 380 на второе полугодие 2017 года), но @Valid
очень старая и полностью основана на JSR 303.
Какмы все знаем, что Spring очень хорошо обеспечивает интеграцию со всеми различными JSR и библиотеками Java в целом (например, JPA, JTA, Caching и т. д.), и, конечно, эти ребята также позаботились о проверке.Одним из ключевых компонентов, способствующих этому, является MethodValidationPostProcessor .
Попытка ответить на ваш вопрос - @Valid
очень удобно для так называемого каскадного валидации, когда вы хотите проверить сложный граф, а непросто элементы верхнего уровня объекта.Каждый раз, когда вы хотите пойти глубже, вы должны использовать @Valid
.Это то, что диктует JSR.Spring выполнит это с некоторыми незначительными отклонениями (например, я попытался поместить @Validated
вместо @Valid
в метод RestController и проверка работоспособности, но то же самое не будет применяться к обычным компонентам "service").