因此,通过研究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);
答案 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。