Spring Boot @RestController, будьте терпимы к MismatchedInputException при десериализации коллекции в @RequestBody - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь реализовать конечную точку, которая принимает List<SomeClass> через @RequestBody и поддерживает частичную обработку / отказоустойчивость.

Как, даже если некоторые элементы неправильны (может даже быть другого типа, но все еще действителен JSON), отбросьте их и переходите к следующему, вместо того, чтобы выдавать исключение и быстро отказывать.

Я уже вызываю средство проверки программно для каждого элемента вместо использования @Valid, но всякий раз, когда Я получаю что-то с другой схемой или типом, я получаю com.fasterxml.jackson.databind.exc.MismatchedInputException.

Как я могу изменить это поведение, чтобы не сбоить, а игнорировать и обрабатывать следующий элемент вместо этого?

Я использую Spring Загрузка 2.2.3.RELEASE.

Я пытался использовать @JsonIgnoreProperties(ignoreUnknown = true), но когда я получаю необъектные типы, исключение все еще выдается.

Пример JSON Я хотел бы обработать:

[
    null,
    [],
    {},
    -1,
    false,
    "Test",
    { "someKey": "someValue" }
]

Где только { "someKey": "someValue" } является действительным SomeClass определением.

1 Ответ

1 голос
/ 22 января 2020

Я бы создал собственный десериализатор для Spring:

Как предоставить собственный десериализатор с Jackson и Spring Boot

Затем в моем десериализаторе я обработайте строку JSON в общем массиве c JSON и через нее l oop попытайтесь десериализовать каждый элемент в массиве.

Для успешных добавьте их в список, который ваш десериализатор вернется. Для тех, кто не «работает», выбросьте их и продолжайте обработку.

Без кода больше нечем помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...