Проверка списка bean-компонентов с использованием Bean Validation 2.0 (JSR-308) и Spring 5 - PullRequest
0 голосов
/ 13 сентября 2018

Spring 5 должен поддерживать Bean Validation 2.0, который ввел проверку для типов List, но я не могу заставить ее работать на меня.

У меня есть следующая конечная точка в моем @RestController:

@PostMapping("/foos")
public List<Foo> analysePoints(@RequestBody @Valid List<@Valid Foo> request) {
    ...
}

Там, где класс Foo имеет некоторые аннотации проверки JSR для своих свойств.

К сожалению, это, похоже, не проверяет его вообще.До Spring 5 я справлялся с этим, заключая List<Foo> в отдельный объект bean-объекта запроса, и это тоже работает в этом случае, но я не хочу этого делать, потому что он изменяет формат требуемого json.

Есть ли способ заставить это работать?

1 Ответ

0 голосов
/ 13 сентября 2018

javax.validation не проверяет список, только JavaBean. Обходной путь должен использовать настроенный класс List:

Вместо

@RequestBody @Valid List<@Valid Foo> request

Использование:

@RequestBody @Valid ValidList<@Valid Foo> request

ValidList

public class ValidList<E> implements List<E> {

    @Valid
    private List<E> list;

    public ValidList() {
        this.list = new ArrayList<E>();
    }

    public ValidList(List<E> list) {
        this.list = list;
    }

    // Bean-like methods, used by javax.validation but ignored by JSON parsing

    public List<E> getList() {
        return list;
    }

    public void setList(List<E> list) {
        this.list = list;
    }

    // List-like methods, used by JSON parsing but ignored by javax.validation

    @Override
    public int size() {
        return list.size();
    }

    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }

    // Other list methods ...
}
...