繁体   English   中英

为什么在序列化/反序列化几何类型时杰克逊 JSON 映射异常

[英]Why Jackson JSON mapping exception when Serializing/Deserializing Geometry type

当我创建用户定义的类“资产”时。

public class Asset {
    private UUID id;
    private String name;
}

并将该类的对象设置为响应。

@GetMapping("/testSerialization")
public Asset testSerialization() {
    return new Asset()
}

该控制器工作成功。

但是当同一个控制器使用几何类型时,请求失败,

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 能够使用 Geometry 类

我的问题是,为什么我必须为几何类型显式执行此操作,而我的自定义类无需操作任何配置即可工作?

Jackson无需对所有常规POJO类进行任何额外配置即可运行良好。 问题出现,当POJO类不规则时:例如,没有getterssettersno-arg构造函数等。

在您的情况下,两个或多个类之间具有循环引用。 当默认序列化器想要序列化所有属性时,它会因此陷入无限递归。 在这种情况下,我们需要提供自定义序列化程序来正确处理这种情况。

这就是为什么您需要为com.vividsolutions.jts.geom包提供自定义序列化器和反序列化器的com.vividsolutions.jts.geom

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM