【发布时间】:2018-02-17 20:45:54
【问题描述】:
我尝试在没有 Spring 或其他框架的情况下使用 Gson 或 Codehaus Jackson 库在纯 java 中创建 api 客户端。 Json 响应有多种类型。像这样:
{
"any_name1": {
"field1": 1,
"field2": 2
},
"any_name2": {
"field1": 3,
"field2": 4
}
...
}
它具有任意名称的对象和相同的字段。 或者这样:
{
"field1":1,
"field2":{
"obj1":{
"field1":1,
"field2":2
}
...
}
}
它应该与这个调用一起工作:
AnyTypeResponse response = apiClient.sendRequest(request, AnyTypeResponse.class);
我发送我想从客户端获得的响应类型。 使用第二个 json 示例很清楚。对象有两个字段,其中之一是列表。 但第一个 json 示例是对象列表。例如,我不需要列表,但我需要一个包含列表(或地图)的对象。这意味着我需要将对象列表包装在一个自定义响应对象中。我怎样才能做到这一点? 现在我用这个方法:
public <T> T execute(Class<T> clazz) throws Exception {
...
// create HttpUrlConnection and send request
...
return objectMapper.readValue(response.toString(), clazz);
// or return gson.fromJson(response.toString(), clazz);
}
public class ListTypeResponse {
private List<AnyObj> objects;
public ListTypeResponse(List<AnyObj> objects) {
this.objects = objects;
}
public List<AnyObj> getObjects() {
return objects;
}
}
但它不起作用。你能帮帮我吗?
【问题讨论】:
-
除非
But it not works进一步澄清(它怎么不起作用?)您的问题缺少 MCVE (minimal reproducible example)。
标签: java json deserialization