java - 为什么序列化/反序列化几何类型时 Jackson JSON 映射异常

标签 java json serialization jackson deserialization

当我创建用户定义的类“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 类不规则时,就会出现问题:例如,没有 getterssettersno-arg 构造函数等

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

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

关于java - 为什么序列化/反序列化几何类型时 Jackson JSON 映射异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258275/

相关文章:

json - 我们可以在不使用循环的情况下获得oracle中列表属性的总和吗?

java - 扩展类而不添加任何新字段

c# - 如何使字段序列化到磁盘,但不深度克隆?

java - 带有线程池的嵌套循环

java - hadoop无法启动start-dfs.sh

json - Postgres JSONB列插入错误: invalid input syntax for type json the input string ended unexpectedly

c++ - 存储一组序列化的 protobuf 对象

java - 是否有类似 JET(Java 发射器模板)但没有 Eclipse 依赖项的东西?

java - 如何用Java读取sqlite数据库文件? (包裹)

java - 如何在java中得到这个输出