Что List <@Valid PhoneNumber> делает в валидации bean 2.0 (JSR380)? - PullRequest
0 голосов
/ 16 января 2019

Снизу ссылка:

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

...