以下片段是不言自明的.您可以看到类型信息未被删除,但mapper不会获取类型信息.我猜是杰克逊不允许这样,对吧?如果我直接传递TypeReference,它会被正确反序列化.
public class AgentReq<T> extends TypeReference<AgentResponse<T>> {...}
mapper.readValue(reader, new AgentReq<Map<String, Set<Whatever>>>());
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它也行不通:
public class AgentReq<T> {
public TypeReference<AgentResponse<T>> getTypeRef() {
return new TypeReference<AgentResponse<T>>() {};
}
}
mapper.readValue(reader, new AgentReq<Map<String, Set<Whatever>>>()).getTypeRef();
Run Code Online (Sandbox Code Playgroud)
我正在使用2.1.5版.
编辑:为了将来参考,在解决问题时不要低估TypeReference构造函数.在那里你可以直接看到它是否能够检索类型信息.顺便说一句答案是否定的,你不能扩展TypeReference并期望它工作,你甚至不能覆盖它的getType()方法并提供从你的类解析的类型信息,因为你可以得到的只是getClass(). getGenericSuperClass()...你不能做getClass().getGenericClass()