Лучший способ обработки двунаправленных ссылок Джексона - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь построить остальные API для наших основных компонентов, используя Джексона, и у меня были проблемы с некоторыми объектами, получающими это исключение:

javax.ws.rs.ProcessingException: com.accelexml.jackson.databind.JsonMappingException: бесконечная рекурсия (StackOverflowError)

После поиска я узнал о нескольких способах ее решения.например, https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

, и я использовал @JsonIdentityInfo, который отлично работает для меня, но вопрос в том, ЧТО ЛУЧШЕ СПОСОБ СДЕЛАТЬ ЭТОМ ?

В этомpost: Бесконечная рекурсия с проблемой Jackson JSON и Hibernate JPA

Существует утверждение, что необходимо с осторожностью использовать @JsonIdentityInfo, так как это может вызвать проблемы:

В этом случае вы должны быть осторожны, так как вам может потребоваться прочитать атрибуты вашего объекта более одного раза (например, в списке продуктов с большим количеством продуктов, имеющих одного и того же продавца), и эта аннотация не позволяет вам сделать это.Я предлагаю всегда просматривать журналы Firebug, чтобы проверить ответ Json и посмотреть, что происходит в вашем коде.

Я также дошел до этой статьи: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html

@ JsonIdentityInfo

Я понял, что @JsonIdentityInfo - более новый подход в Джексоне 2.

Преимущество в том, что он требует минимального изменения кода (просто чтобы поместить эту аннотацию в проблемную объектную модель ине нужно обрабатывать его с другой стороны.

Объясняется недостаток

@ JsonIgnoreProperties Требуется изменить больше классов, а не просто аннотировать базовый, и яЯ не уверен, как это будет работать, если у меня есть несколько классов, наследующих эту объектную модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...