Spring Boot возвращает объект с двумя объектами JsonObjects в исключение самореференции [дубликат]

Исходные типы прекрасны, когда они выражают то, что вы хотите выразить.

Например, функция десериализации может возвращать List, но она не знает тип элемента списка. Таким образом, List является подходящим типом возврата.

5
задан Global Warrior 26 November 2013 в 15:54
поделиться

4 ответа

Саморегуляция здесь:

public class DailyActivity extends ElasticSearchValue<DailyActivity> {

Вы говорите, что DailyActivity является ElasticSearchValue<DailyActivity>, который сам по себе является ElasticSearchValue<ElasticSearchValue<DailyActivity>>, и это продолжается бесконечно ...

Обновление: я бы разбил это на два класса. Создайте DailyActivity без подкласса ElasticSearchValue:

public class DailyActivity {
  // the same content as your class above

, затем создайте другой класс, например:

public class ElacticDailyActivity extends ElasticSearchValue<DailyActivity> {
1
ответ дан ericbn 21 August 2018 в 20:00
поделиться
  • 1
    Я. Я знаю это и спрашиваю, как десериализировать такой класс? – Global Warrior 26 November 2013 в 15:55

Попробуйте @JsonIdentityInfo аннотацию, указанную в этом примере. Подробнее здесь http://wiki.fasterxml.com/JacksonFeatureObjectIdentity

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class Identifiable
{
    public int value;

    public Identifiable next;
}
1
ответ дан MFIhsan 21 August 2018 в 20:00
поделиться
  • 1
    Я столкнулся с той же проблемой. Я сконфигурировал свой проект, как указано в ссылке выше, но он не работает. – Nagaveer Gowda 7 November 2016 в 08:21

В этом случае вам необходимо аннотировать отношения с @JsonManagedReference и @JsonBackReference следующим образом:

 @ManyToOne
 @JoinColumn(name = "company_id", referencedColumnName = "id")
 @JsonBackReference
 private Company company 

И

 @OneToMany(mappedBy="company")
 @JsonManagedReference
 private Set<Employee> employee = new HashSet<Employee>();

Здесь есть хороший пример

7
ответ дан Piyush Verma 21 August 2018 в 20:00
поделиться

Я думаю, где-то в вашем коде. Предыдущий из некоторых примеров DailyActivity указывает на себя.

0
ответ дан Yiheng Wang 21 August 2018 в 20:00
поделиться
  • 1
    Я., это очевидно. Позвольте мне переформулировать вопрос о том, как вы можете десериализовать объект, который имеет собственную ссылку? – Global Warrior 26 November 2013 в 15:49
  • 2
    Я не думаю, что ты можешь. Я установил предыдущее значение null, когда он указывает на себя перед отправкой объекта. В другом конце, после получения объекта, измените предыдущее на себя, если оно равно null. Может быть, у кого-то есть лучшая идея. – Yiheng Wang 26 November 2013 в 16:03
Другие вопросы по тегам:

Похожие вопросы: