我有一个实体,其中属性之一是位置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”])
为什么杰克逊无法转换财产,应该怎么做?
答案 0 :(得分:1)
org.geolatte.geom.Point
类扩展了org.geolatte.geom.Geometry
方法,该方法具有Envelope<P> getEnvelope()
方法。默认情况下,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
方法是创建自定义POJO
,我们将基于Point
创建自定义3-rd party libraries
,我们可以完全控制_DO NOT INSTALL..
的可见内容。
答案 1 :(得分:0)
我通过用org.geolatte.geom.Point<G2D>
代替org.locationtech.jts.geom.Point
解决了我的问题,但我不知道为什么Point无法正常工作。