为什么序列化后缺少类类型?

时间:2016-09-20 11:07:53

标签: java serialization jackson

我遇到杰克逊已知的问题"缺少关于序列化的类型信息"(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);
}

1 个答案:

答案 0 :(得分:1)

这还不足以确定根本原因,但作为一般规则,它可能是由于Java类型擦除。避免这类问题的一个简单方法是永远不要使用泛型类型是根值;也就是说,REST API序列化或反序列化的直接值。相反,最好有一个可以自由包含泛型类型的POJO,例如ListMap s。这避免了多态类型信息处理的大多数问题。

避免泛型根类型的替代方法是使用Java数组:在本例中为POJO[]。数组是完全类型化的,不使用泛型,因此类型信息总是可以从实例中获得。