Я пытаюсь построить остальные 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 Требуется изменить больше классов, а не просто аннотировать базовый, и яЯ не уверен, как это будет работать, если у меня есть несколько классов, наследующих эту объектную модель.