Снизу ссылка:
Проверка списка объектов в Spring
и Проверка списка bean-компонентов с использованием Bean Validation 2.0 (JSR-308) и Spring 5 , я узнал, что невозможно проверить список объектов, и мои собственные коды также подтвердили это. Код (не работает) должен выглядеть так:
@PostMapping("/foos")
public List<Foo> analysePoints(@RequestBody @Valid List<@Valid Foo> request) {
...
}
Но спецификация проверки бина гласит, что (P63):
Поля со значениями в коллекциях, со значениями в массивах и в общем случае с итерациями
свойства также могут быть украшены аннотацией @Valid. это
вызывает проверку содержимого итератора. Любой объект
реализация java.lang.Iterable поддерживается. Это включает
в частности:
• массивы объектов
• java.util.Collection
• java.util.Set
• java.util.List
• java.util.Map (см. Специальное лечение
ниже)
Каждый объект, предоставленный итератором, проверяется. Для карты
Значение (полученное getValue) каждого Map.Entry проверяется (ключ
не подтверждено).
А это пример в P64:
Пример 5.1: Создание элементов списка, подлежащих проверке графа
public class User {
// preferred style as of Bean Validation 2.0
private List<@Valid PhoneNumber> phoneNumbers;
// traditional style; continues to be supported
@Valid
private List<PhoneNumber> phoneNumbers;
// discouraged; either the container or the type argument(s) should be
// annotated with @Valid, but not both
@Valid
private List<@Valid PhoneNumber> phoneNumbers;
}
Так что, похоже, private List<@Valid PhoneNumber> phoneNumbers;
является законным и должно иметь определенный эффект. Если он не проверяет все PhoneNumber
в списке, что он делает? Прочитайте спецификацию, но это непросто понять, по крайней мере, для меня.