Преобразователь конечных точек Google для org.geolatte.geom.Point - PullRequest
2 голосов
/ 19 марта 2019

У меня есть сущность, одно из свойств которой - местоположение 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 [ "оси"] -> орг .geolatte.geom.crs.GeodeticLongitudeCSAxis [ "единица"] -> org.geolatte.geom.crs.AngularUnit [ "fundamentalUnit"] -> org.geolatte.geom.crs.AngularUnit [ "fundamentalUnit"])

Почему Джексон не может преобразовать свойство и как это должно быть сделано?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

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.

0 голосов
/ 19 марта 2019

Я решаю свою проблему, заменив org.geolatte.geom.Point<G2D> на org.locationtech.jts.geom.Point, но я не знаю, почему Point не работает должным образом.

...