用于org.geolatte.geom.Point的Google端点转换器

时间:2019-03-19 17:24:20

标签: java jackson google-cloud-endpoints

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

  

com.fasterxml.jackson.databind.JsonMappingException:直接自引用导致循环(通过引用链: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”])

为什么杰克逊无法转换财产,应该怎么做?

2 个答案:

答案 0 :(得分:1)

org.geolatte.geom.Point类扩展了org.geolatte.geom.Geometry方法,该方法具有Envelope<P> getEnvelope()方法。默认情况下,Jackson序列化所有POJO gettersget*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创建自定义3-rd party libraries,我们可以完全控制_DO NOT INSTALL..的可见内容。

答案 1 :(得分:0)

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