【发布时间】:2013-10-09 22:01:30
【问题描述】:
下面的 sn-p 是不言自明的。可以看到类型信息没有被擦除,但是mapper没有得到类型信息。我的猜测是杰克逊不允许这样做,对吧?如果我直接通过 TypeReference,它会被正确反序列化。
public class AgentReq<T> extends TypeReference<AgentResponse<T>> {...}
mapper.readValue(reader, new AgentReq<Map<String, Set<Whatever>>>());
如果我这样做,它也不起作用:
public class AgentReq<T> {
public TypeReference<AgentResponse<T>> getTypeRef() {
return new TypeReference<AgentResponse<T>>() {};
}
}
mapper.readValue(reader, new AgentReq<Map<String, Set<Whatever>>>()).getTypeRef();
我使用的是 2.1.5 版。
编辑:为了将来参考,解决问题时不要低估 TypeReference 构造函数。在那里你可以直接看到它是否能够检索类型信息。顺便说一句,答案是否定的,你不能扩展 TypeReference 并期望它工作,你甚至不能覆盖它的 getType() 方法并提供从你的类解析的类型信息,因为你能得到的只是 getClass()。 getGenericSuperClass() ... 你不能做 getClass().getGenericClass()
【问题讨论】:
-
你能提供一个使用
TypeReference的类吗?小型 SSCCE? -
现在是凌晨 1 点 35 分,我要睡觉了 Sotirios……我明天早上再看看。
-
NP,我回家也试试。