Spring поддерживает два разных метода проверки: проверка Spring и проверка bean-компонентов JSR-303. Оба могут использоваться, определяя валидатор Spring, который делегирует другим делегатам, включая валидатор bean. Все идет нормально.
Но когда аннотируют методы для запроса проверки, это совсем другая история. Я могу аннотировать вот так
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
или как это
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Здесь @Valid - это javax.validation.Valid , а @Validated - это org.springframework.validation.annotation.Validated . В документации для последнего говорится
Вариант Valid JSR-303, поддерживающий спецификацию групп валидации. Разработан для удобного использования с поддержкой Spring JSR-303, но не специфичен для JSR-303.
что не очень помогает, потому что не говорит точно, чем все отличается. Если вообще. Мне кажется, оба работают нормально.
источник
Ответы:
Как вы процитировали из документации,
@Validated
была добавлена поддержка «групп проверки», то есть группы полей в проверяемом компоненте. Это можно использовать в многоступенчатых формах, где вы можете проверить имя, адрес электронной почты и т. Д. На первом этапе, а затем в других полях на следующем этапе (этапах).Причина, по которой это не было добавлено в
@Valid
аннотацию, заключается в том, что он стандартизирован с использованием процесса сообщества Java (JSR-303), который требует времени, и разработчики Spring хотели, чтобы люди могли использовать эту функцию раньше.Перейдите в этот билет jira, чтобы узнать, как появилась аннотация.
источник
Более прямой ответ. Для тех, кто еще не знает, что такое «группа проверки» .
Использование для
@Valid
проверкиКонтроллер:
Объект формы:
Использование для
@Validated
группы проверкиИсточник: http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html
Контроллер:
Объект формы:
источник
В примере фрагменты кода вопроса
@Valid
и@Validated
без разницы. Но если@RequestBody
аннотируетсяList
объектом или является строковым значением, аннотированным@RequestParam
, проверка не вступит в силу.Мы можем использовать
@Validated
возможность проверки на уровне метода, чтобы заставить его работать. Чтобы добиться этого, ключевым моментом является размещение@Validated
в классе. Это может быть еще одно важное различие между@Valid
и@Validated
в весеннем рамках.Ссылка
источник
List
объекты? Я предполагаю, что это также не будет работать для других коллекций, напримерMap
? Возможно, вы могли бы дать мне более подробное объяснение в моем вопросе: stackoverflow.com/questions/60167961/…помимо вышеуказанного, вы можете подать заявку только
@Valid
на домен / поле для вложенной проверки, но не с расширением@validated
.источник