Что List<@Valid PhoneNumber> делает в валидации bean 2.0(JSR380)?
Снизу ссылка:
Проверка списка объектов в Spring и Проверка списка bean-компонентов с использованием Bean Validation 2.0 (JSR-308) и Spring 5, я узнал, что невозможно проверить список объектов, и мои коды owen также доказали это. Код (не работает) должен понравиться:
@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 (специальное обращение см. Ниже)
Каждый объект, предоставленный итератором, проверяется. Для 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
в списке, что это делает? Прочитайте спецификацию, но это не так легко понять, по крайней мере, для меня.