gpt4 book ai didi

java - 解析和映射具有动态属性的 JSON 对象

转载 作者:太空宇宙 更新时间:2023-11-04 11:01:33 24 4
gpt4 key购买 nike

因此,通过 Stackoverflow 上的研究,especially this topic ,我确定我有一个 JSON 对象字典嵌入在其他有效的 getter/setter 设置中。当我调用 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);

最佳答案

我的解决方案是分层解决方案。

首先,the discovery that Moxy只是不做 map 是可怕的,而是一旦我发现这是问题所在,就会重新经历。所以我不得不将我的默认序列化器从 Moxy 更改为 Jackson。通过更改 pom.xml 可以轻松完成此操作。 :

<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>>;

将构造函数与它对齐总是会删除数据。相反,我只是初始化映射,然后在 POJO 上创建普通的 getter/setter。

关于java - 解析和映射具有动态属性的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com