Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException
пытаюсь реализовать Spring boot приложение
есть 2 класса, которые связаны many to one и соответственно one to many
класс User:
@Entity
@Table (name = "user_table")
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private String email;
@Column
private String password;
@Column
private String firstName;
@Column
private String lastName;
@Column
private Date created;
@OneToMany(mappedBy = "userss", fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
private Set<Goal> goalSet = new HashSet<>();
public User(String email, String password, String firstName, String lastName, Date created) {
this.email = email;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.created = created;
}
}
и класс Goal:
@Getter
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Entity
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Goal implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private Date created;
@Column
private String description;
@Column
private Priority priority;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private User userss;
Когда я вызываю метод get для списка всех целей для конкретного пользователя, то выводится все отлично. Но когда вывожу всех пользователей, то возникает ошибка:
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: java.util.ArrayList[0]->ru.sfedu.diplomabackend.model.User["goalSet"])]
Метод для нахождения целей конкретного пользователя:
public List findByUserId(Long userId){
return getSession().createQuery("from Goal where userss.id =:userId").setParameter("userId", userId).list();
}
И метод для вывода всех пользователей:
public List getUsers() {
return getSession().createQuery("from User").list();
}
В контроллере я просто вызываю метод выше.
В интернете решение было добавить @JsonIgnore, но мне данный способ не помог