Я занимаюсь разработкой веб-приложения Spring Boot, которое предоставляет API-интерфейсы REST, и у меня возникли проблемы с сериализацией JSON.
Допустим, у меня есть два класса A и B, которые находятся в двунаправленном отношении один-ко-многим.
Это означает, что у меня есть что-то вроде этого:
public class A {
private List<B> bList;
...
}
и
public class B {
private A owner;
...
}
Когда дело касается JSON-сериализации, это, конечно, цикл.
И это моя проблема:
- В методах API, которые фокусируются на
A
(например, «дать мне список всех как в БД»), я бы хотелСериализация JSON, в которой: A
объекты содержат список B
s B
объектов, не содержащих своего владельца A
- В методах API, которые фокусируются на
B
(например, «дай мне список всех B
s в БД»), я хотел бы сериализацию JSON, в которой: A
объекты делаютне содержат список их B
s B
объектов, которые содержат их A
владельца
Я думаю, что смогу заставить его работатьс @JsonView
аннотациями, но я не думаю, что это элегантное решение.В моем приложении (которое имеет более двух классов) мне нужно было бы создать и управлять как минимум 4 или 5 JsonView: так что в моих классах модели для каждого атрибута мне пришлось бы управлять беспорядочной связкой @JsonView
аннотаций.Напротив, я считаю, что модельные классы не должны осознавать тот факт, что они имеют разные представления JSON в зависимости от метода API.
Я искал, как использовать пользовательские сериализаторы JSON, и обнаружил, что Джексон позволяет делать это с помощью SimpleModule.Однако кажется, что SimpleModule не позволяет выбирать, какой сериализатор использовать в каждом конкретном случае (он просто всегда использует последний добавленный Serializer).
Так что я немного не в курсе.Кто-нибудь знает чистый способ позволить контроллерам выбирать, как сериализовать класс?