Я пишу загрузочное приложение Spring, которое использует RestController для предоставления одного ресурса. Единственный ресурс, MainResource, выглядит примерно так:
String id;
String title;
List<String> tags;
ComplexGraphObject gObject;
Чтобы это работало, я написал DTO для MainResource и для gObject и его полей, где это необходимо. Я аннотировал DTO с помощью Джексона и написал DTO-Mappers, которые возвращают модели предметной области. Spring правильно сериализует запросы к DTO, а служба приложений вызывает DTO-Mappers для объектов домена.
Теперь я понял, что gObject должен быть отдельной библиотекой, так как мы хотели бы использовать ее для клиентских и серверных приложений.
Мои цели:
- Библиотека должна принимать сериализованные объекты gObject в формате json/xml и возвращать объекты домена.
- Библиотека должна принимать gObjects домена и возвращать сериализованные json/xml.
- Включите приложения, которые уже используют Jackson, для максимально эффективной работы с библиотекой, такой как Spring Boot, например.
- Предоставьте удобные методы для других приложений, которые могут использовать, например, что-то вроде gson.
Из того, что я читал, можно использовать специальный jackson de/serializer. Но между пользовательскими сериализаторами, ObjectMapper, MixIns и т. д. я не знаю, как это сделать.
РЕДАКТИРОВАТЬ: я думаю, что цель миксинов - это то, что делают мои DTO, а DTO-Mapper делает то, что должен делать пользовательский де/сериализатор. Есть ли способ смешать два?
РЕДАКТИРОВАТЬ: Важная часть, которую я забыл. DTO-Mapper генерирует объекты домена из DTO, а также матрицу, которая представляет необходимые отношения для каждого узла в графе, чтобы их можно было соединить соответствующим образом. Итак, я думаю, мне нужно сделать это в пользовательском сериализаторе?