当我创建用户定义的类“Asset”时。
public class Asset {
private UUID id;
private String name;
}
并设置该类的一个对象作为响应。
@GetMapping("/testSerialization")
public Asset testSerialization() {
return new Asset()
}
该 Controller 工作成功。
但是当同一个 Controller 使用几何类型时,请求失败,
import com.vividsolutions.jts.geom.Point;
// Does not work
@GetMapping("/testSerialization")
public Point testSerialization() {
GeometryFactory geometryFactory = new GeometryFactory();
Point point = geometryFactory.createPoint(new Coordinate(1, 2));
return point;
}
我知道我必须手动或使用像 Jackson-datatype-jts 这样的库添加对 Jackson 的序列化和反序列化引用,使 Jackson 能够使用几何类
我的问题是,为什么我必须对 Geomtery 类型明确执行此操作,而我的自定义类无需操作任何配置即可工作?
最佳答案
Jackson
无需任何额外配置即可与所有常规 POJO
类配合使用。当 POJO
类不规则时,就会出现问题:例如,没有 getters
、setters
、no-arg
构造函数等
在您的情况下,两个或多个类之间存在循环引用。当默认序列化程序想要序列化所有属性时,它会因此陷入无限递归。在这种情况下,我们需要提供自定义序列化程序来正确处理这种情况。
这就是为什么您需要为 com.vividsolutions.jts.geom
包提供自定义序列化器和反序列化器。
关于java - 为什么序列化/反序列化几何类型时 Jackson JSON 映射异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258275/