使用动态属性解析和映射JSON对象

时间:2017-10-20 13:43:31

标签: java jackson

因此,通过研究Stackoverflow,especially this topic,我已经确定我有一个嵌入在其他工作的getter / setter设置中的JSON对象字典。当我调用API时,属性的传统getter / setter运行良好,但那是因为我知道属性的名称是什么。如何才能使这个名为errors的对象的未知属性,以及(Map<String,List>)中此对象的格式是什么?

API响应:

{
    "success":false,
    "response_code":1,
    "status_message":"One or more errors has occurred.",
    "errors":{
        "171":["Some error message."],
        "555":["Some other error message."]
    }
}

我的POJO:

public class APIResponse {
    private boolean success;
    private int response_code;
    private String status_message;
    private Map<String, List> errors = new HashMap<>();
    ...
}

如何设置getter / setter和正确的字典格式(看起来可能是Map<String,List>),以便我可以开始接收这个动态errors对象?

我正在使用Invocation.Builder将API响应解析为对象。

Response response= invocationBuilder.post(Entity.entity(APIRequest, MediaType.APPLICATION_JSON));
APIResponse formattedResponse = response.readEntity(APIResponse.class);

1 个答案:

答案 0 :(得分:0)

我的解决方案是分层的。

首先,the discovery that Moxy只是不做地图是可怕的,而是一旦我发现问题就重温了。所以我不得不将我的默认序列化器从Moxy更改为Jackson。通过更改<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>${jersey.version}</version> </dependency>

可以轻松完成此操作
private Map<String, List> errors = new HashMap<>();

其次,我的尝试有点不对,而不是:

private HashMap<String, ArrayList<String>>;

我真的需要:

this.length

将构造函数向右倾斜将始终消除数据。相反,我只是初始化地图,然后在POJO上创建了正常的getter / setter。