Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么序列化后类类型丢失?_Java_Serialization_Jackson - Fatal编程技术网

Java 为什么序列化后类类型丢失?

Java 为什么序列化后类类型丢失?,java,serialization,jackson,Java,Serialization,Jackson,我面临着jackson关于“缺少序列化的类型信息”的已知问题() 我不明白。 为什么这样做很好(类类型设置正确) @Path(“{id}”) @得到 公共列表getPOJO(@PathParam(“id”)BigInteger id){ //从数据库中获取一些pojoInstances List arr=新阵列列表(pojoInstances); 返回arr; } 那一个不行 @Path("{id}") @GET public Collection<POJO> getPOJO(@P

我面临着jackson关于“缺少序列化的类型信息”的已知问题() 我不明白。 为什么这样做很好(类类型设置正确)

@Path(“{id}”)
@得到
公共列表getPOJO(@PathParam(“id”)BigInteger id){
//从数据库中获取一些pojoInstances
List arr=新阵列列表(pojoInstances);
返回arr;
}
那一个不行

@Path("{id}")
@GET
public Collection<POJO> getPOJO(@PathParam("id") BigInteger id) {
    //get some pojoInstances from db
    return new ArrayList<>(pojoInstances);
}
@Path(“{id}”)
@得到
公共集合getPOJO(@PathParam(“id”)BigInteger id){
//从数据库中获取一些pojoInstances
返回新的ArrayList(pojoInstances);
}

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

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

@Path("{id}")
@GET
public Collection<POJO> getPOJO(@PathParam("id") BigInteger id) {
    //get some pojoInstances from db
    return new ArrayList<>(pojoInstances);
}