有没有一种方法可以解决Jackson中的反序列化问题

时间:2020-03-19 09:50:06

标签: json spring jackson

我的Spring Boot Web应用程序内部通过代理类型的应用程序(也由我们项目中的其他应用程序使用)将API请求发送到另一个Spring Boot Micro服务,如下图所示。

问题出在杰克逊反序列化上。在Webapp中,使用ObjectMapper将POJO转换为JSON字符串,并在请求正文中以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

0 个答案:

没有答案