Java 为什么序列化后类类型丢失?
我面临着jackson关于“缺少序列化的类型信息”的已知问题() 我不明白。 为什么这样做很好(类类型设置正确)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
@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);
}