我遇到杰克逊已知的问题"缺少关于序列化的类型信息"(http://wiki.fasterxml.com/JacksonPolymorphicDeserialization) 我无法理解它。 为什么这样工作正常(类类型设置正确)?
@Path("{id}")
@GET
public List<POJO> getPOJO(@PathParam("id") BigInteger id) {
//get some pojoInstances from db
List<POJO> arr = new ArrayList<>(pojoInstances);
return arr;
}
那个人不能工作
@Path("{id}")
@GET
public Collection<POJO> getPOJO(@PathParam("id") BigInteger id) {
//get some pojoInstances from db
return new ArrayList<>(pojoInstances);
}
答案 0 :(得分:1)
这还不足以确定根本原因,但作为一般规则,它可能是由于Java类型擦除。避免这类问题的一个简单方法是永远不要使用泛型类型是根值;也就是说,REST API序列化或反序列化的直接值。相反,最好有一个可以自由包含泛型类型的POJO,例如List
和Map
s。这避免了多态类型信息处理的大多数问题。
避免泛型根类型的替代方法是使用Java数组:在本例中为POJO[]
。数组是完全类型化的,不使用泛型,因此类型信息总是可以从实例中获得。