首页 > 解决方案 > 使用 FasterXML 解析 Json 以获取通用元素

问题描述

我正在使用 java spring boot 通过 REST api 读取数据。

传入数据指定如下:

public class Element<T>
{
    public String error;
    public Boolean state;
    public T subelement;
}

public class Response<T>
{
    public Element<T> element;
}

泛型 T 可以是任何泛型类,例如布尔类或复杂类。

在一个简单的示例中,我尝试解析一个 Response 元素:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(value, Response<Boolean>.class);

Eclipse 将 Response.class 部分标记为如下:

布尔值无法解析为变量

我习惯于动态使用泛型以便在 Delphi 和 .NET 中进行动态交互。从来没有生成类或传递类型的冲动,因为您可以将 T 分类为一个类,拥有一个空的构造函数并且 json 包装器接受 T 个参数。

由于 JacksonXML 需要一个类,我需要找到解决它的方法。

我在这里尝试了一些关于堆栈溢出的帖子,以通过以下方式获取数据:

有任何想法吗?

编辑:

那么它可能基于它看起来不同的列表元素。这是我的 json 示例:

{"id":1,"state":true,"element":{"response":{"data":{"client_id":"sock1591427021","protocol_version":2}}},"errormsg":"OK"}

这部分我用来转换 json :

private <T extends Object> APIResponse<T> readResponse(String data) {
        try {
            var value = objectMapper.readValue(data, new TypeReference<APIResponse<T>>() {
            });

            return value;
        } catch (Exception e) {
            logger.warn(e.getMessage());
            return null;
        }
    }

标签: javajsonspringgenericsjackson

解决方案


推荐阅读