【发布时间】:2016-04-14 04:48:49
【问题描述】:
我从我的服务器收到如下响应:
{
"timestamp" : 1,
"some other data": "blah",
"result" : {
...
}
}
适用于各种通话。我想做的客户端是:
class ServerResponse<T> {
long timestamp;
T result;
}
然后使用 GSON 或 Jackson 对其进行反序列化。由于类型擦除,我一直无法这样做。我欺骗了使用这样的子类:
class SpecificResponse extends ServerRequest<SpecificType> {}
但这需要一堆无用的类。谁有更好的方法?
我还需要能够处理结果为数组的情况。
【问题讨论】:
-
TypeToken在 Gson,TypeReference在杰克逊。如果您打算将数组包装在ServerResponse中,则该数组会更加困难。 -
一些框架允许你在客户端请求中指定一个类类型,它具体化了类型参数并使请求返回具体类型。查找采用 Class 参数的请求 api 的变体。
-
@Pillar 我很高兴有一个第二类 ServerArrayRequest,其中变量是 List
结果,如果这更容易的话。我不介意两个,我宁愿没有几十个。 -
Jackson 有一个名为
ACCEPT_SINGLE_VALUE_AS_ARRAY的功能,可以让你这样做,但你的 Java 代码必须有一个List<T>。然后将使用单个值填充它。
标签: java generics jackson gson