簡體   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