Почему исключение отображения Джексона JSON при сериализации / десериализации типа геометрии - PullRequest
1 голос
/ 17 февраля 2020

Когда я создаю пользовательский класс "Актив".

public class Asset {
    private UUID id;
    private String name;
}

И задаю объект этого класса в качестве ответа.

@GetMapping("/testSerialization")
public Asset testSerialization() {
    return new Asset()
}

Этот контроллер успешно работает.

Но когда тот же контроллер использует Geometry Types, запрос не выполняется,

import com.vividsolutions.jts.geom.Point;

// Does not work
@GetMapping("/testSerialization")
public Point testSerialization() {
    GeometryFactory geometryFactory = new GeometryFactory();
    Point point = geometryFactory.createPoint(new Coordinate(1, 2));
    return point;
}

Я знаю, что мне нужно добавить ссылки на сериализацию и десериализацию для Джексона, либо вручную, либо с использованием библиотеки, такой как Jackson-datatype-jts , чтобы Джексон мог работать с классами Geometry

Мой вопрос: почему я должен делать это явно для типов Geomtery, тогда как мои пользовательские классы работают без манипулирования какими-либо конфигурациями?

1 Ответ

1 голос
/ 17 февраля 2020

Jackson хорошо работает без дополнительной настройки со всеми обычными POJO классами. Проблема возникает, когда классы POJO не являются регулярными: например, не имеют конструктора getters, setters, no-arg и т. Д. c.

В вашем случае два или более классов иметь круговую ссылку между ними. Когда по умолчанию сериализатор хочет сериализовать все свойства, он погружается в бесконечную рекурсию из-за этого. В этом случае нам нужно предоставить настраиваемый сериализатор, который правильно обрабатывает этот случай.

Именно поэтому вам необходимо предоставить настраиваемые сериализаторы и десериализаторы для пакета com.vividsolutions.jts.geom.

...