У нас есть много спящих классов сущностей с вложенными отношениями. Я пытаюсь найти лучший способ преобразовать данный объект в эквивалентный формат json.
Я знаю о JsonIgnore, примесях Джексона и JsonFilters и экспериментировал с ними.
Проблемы, с которыми мы сталкиваемся, следующие
Объекты, связанные друг с другом с помощью OneToMany/JoinColumn или подобных аннотаций, создают бесконечную рекурсию.
Утилиты или метаметоды. Джексон, похоже, использует методы геттера, а не поля. Некоторые из методов являются «мета»-методами, не связанными ни с какими столбцами. Примером метода getTotal может быть суммирование значений пары фактических полей без фактического итогового поля. Аналогичный случай для других случаев, таких как getIncomeAccounts, который фильтрует учетные записи на основе некоторых критериев.
Фильтр Джексона, который я написал, немного помогает - он проверяет, существует ли поле класса на основе имени свойства Джексона. Он также проверяет наличие аннотаций, таких как аннотация JoinColumn, чтобы избежать рекурсии, если поле существует.
Есть ли способ получить метаданные из спящего режима и использовать их в своих фильтрах? В основном для данного объекта сущности мне интересно знать, будет ли свойство, которое Джексон хочет сериализовать, сопоставляться со столбцом и сериализоваться только в том случае, если с ним связано значение столбца. Hibernate, безусловно, знает о свойствах и сопоставлениях столбцов.
Опции Mixins и jsonignore работают, но тогда мы зависим от отдельного разработчика, который помнит о размещении аннотаций в соответствующем месте. Обычно забытые аннотации обнаруживаются слишком поздно, когда мы действительно хотим получить экспортированные данные, чтобы проанализировать какую-то проблему и создать тестовый пример локально.