Что 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 в списке, что это делает? Прочитайте спецификацию, но это не так легко понять, по крайней мере, для меня.

0 ответов

Другие вопросы по тегам