Загрузочное веб-приложение 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);
}
}