Google org.geolatte.geom.Point 的端点转换器
Google Endpoints transformer for org.geolatte.geom.Point
我有一个实体,其中一个属性是位置 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 无法转换 属性 以及应该如何转换?
我用org.locationtech.jts.geom.Point
替换org.geolatte.geom.Point<G2D>
解决了我的问题,但我不知道为什么Point不能正常工作。
org.geolatte.geom.Point
class 扩展了具有 Envelope<P> getEnvelope()
方法的 org.geolatte.geom.Geometry
。 Jackson
默认序列化所有 POJO
getters
: 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
方法是创建我们将基于 Point
创建的自定义 POJO
,我们可以完全控制 3-rd party libraries
.
的可见内容
我有一个实体,其中一个属性是位置 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 无法转换 属性 以及应该如何转换?
我用org.locationtech.jts.geom.Point
替换org.geolatte.geom.Point<G2D>
解决了我的问题,但我不知道为什么Point不能正常工作。
org.geolatte.geom.Point
class 扩展了具有 Envelope<P> getEnvelope()
方法的 org.geolatte.geom.Geometry
。 Jackson
默认序列化所有 POJO
getters
: 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
方法是创建我们将基于 Point
创建的自定义 POJO
,我们可以完全控制 3-rd party libraries
.