#json #spring #spring-boot #jackson
Вопрос:
org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)
Бесконечная рекурсия spring-это классическая ошибка spring, с которой легко справиться с помощью @JsonManagedReference и @JsonBackedReference, однако, логически, использование этих аннотаций может вызвать некоторые проблемы:
- Несколько аннотаций @JsonManagedReference и @JsonBackedReference внутри класса вызывают проблему, когда вам нужно специально указать имя значения для каждой аннотации, чтобы составить пару Json, иначе вы получите ошибку сервера времени выполнения, если у вас их много, этот процесс неудобен
- Если вам нужно сериализовать эти объекты, это серьезная проблема. Например, у меня была сущность, которая требовала отправки сериализации в теме кафки, но использование этих аннотаций заставило сериализацию пропустить пропорции, аннотированные @JsonManagedReference и @JsonBackReference (логически, как указано в документации Джексона для этих аннотаций)
Есть ли способ решить эту проблему без потери свойств сериализации или написания грязного кода?
Это краткий пример, это свойство не будет сериализовано, и поскольку оно принадлежит классу, в котором требуется много @JsonBackReference, вам необходимо указать значение
@ManyToOne(targetEntity = Restaurant.class)
@JoinColumn(name = "restaurant_id")
@JsonBackReference(value = "orders") //not so clean
private Restaurant restaurant;
Комментарии:
1. Вы рассматривали возможность использования
@JsonIdentityInfo
вместо этого?