有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Google组织端点转换器。吉奥拉特。geom。指向

我有一个实体,其中一个属性是位置org.geolatte.geom.Point<G2D>。我为它创建了Google端点Transformer<Point<G2D>, String>,但收到以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle (through reference chain: com.example.package.MyEntity["location"]->org.geolatte.geom.Point["envelope"]->org.geolatte.geom.Envelope["coordinateReferenceSystem"]->org.geolatte.geom.crs.Geographic2DCoordinateReferenceSystem["coordinateSystem"]->org.geolatte.geom.crs.EllipsoidalCoordinateSystem2D["axes"]->org.geolatte.geom.crs.GeodeticLongitudeCSAxis["unit"]->org.geolatte.geom.crs.AngularUnit["fundamentalUnit"]->org.geolatte.geom.crs.AngularUnit["fundamentalUnit"])

为什么Jackson无法转换该属性以及应该如何转换


共 (2) 个答案

  1. # 1 楼答案

    org.geolatte.geom.Point类扩展了具有Envelope<P> getEnvelope()方法的org.geolatte.geom.Geometry^默认情况下,{}序列化所有POJO{}:get*is*方法。您需要使用JsonIgnore注释忽略这些方法。示例MixIn接口可能如下所示:

    interface GeometryMixIn {
    
        @JsonIgnore
        Envelope getEnvelope();
    
        @JsonIgnore
        PositionSequence getPositions();
    }
    

    现在我们需要注册如下:

    ObjectMapper mapper = new ObjectMapper();
    mapper.addMixIn(Geometry.class, GeometryMixIn.class);
    

    现在您可以使用这个映射器来Point序列化。在这种情况下,其他getters会有问题,以同样的方式忽略它们。但是最好的OOP方法是创建自定义的POJO,我们将基于Point创建自定义的POJO,我们可以完全控制3-rd party libraries的可见内容

  2. # 2 楼答案

    我通过用org.locationtech.jts.geom.Point替换org.geolatte.geom.Point<G2D>来解决我的问题,但我不知道为什么Point不能正常工作