Есть ли способ решить эту проблему десериализации в Джексоне - PullRequest
0 голосов
/ 19 марта 2020

Загрузочное веб-приложение My Spring внутренне отправляет запрос API другому сервису Spring boot Micro через прокси-приложение (также используемое другими приложениями в нашем проекте), как показано на рисунке ниже.

Проблема в десериализации Джексона. В Webapp POJO преобразуется в строку JSON с использованием ObjectMapper, а запрос отправляется как String в теле запроса. Прокси сначала получает запрос, и это тело запроса String не затрагивается. Но это делает другие работы с запросом. Проблема возникает, когда запрос снова обходит мой микро-сервис и когда я десериализирую этот String запрос в мой требуемый тип POJO. Это дано ниже.

// Inside OncePerRequestFilter#doFilterInternal

safeParseJSON(objectMapper, request.getInputStream(), MyPojo.class); // Failed to Parse.

safeParseJSON(objectMapper, safeParseJSON(objectMapper, httpServletRequest.getInputStream(), String.class), MyPojo.class) // Successfully parsed

Получение исключения типа jackson.databind.JsonMappingException: Can not construct instance of...no String-argument constructor/factory method to deserialize from String value ('<MY HUGE JSON>'). Пожалуйста, помогите мне в этом

public static <T> T safeParseJSON(ObjectMapper objectMapper, InputStream inputStream, Class<T> targetType) {
    try {
        return objectMapper.readValue(inputStream, targetType);
    } catch (IOException ex) {
        throw new RuntimeException(String.format("Unable to parse JSON payload - %s", ex.getMessage()), ex);
    }
}

Architecture

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