user 와 board 를 일대다 양방향으로 작업했다.
public class User {
@OneToMany(mappedBy = "user")
private List<Board> boards = new ArrayList<>();
}
public class Board {
@ManyToOne
@JoinColumn(name = "user_id")
private User user
}
테스트를 해보니 오류가 발생하였다.
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
이 문제는 User
와 Board
가 서로의 객체를 가지고 있어 무한 루프가 발생하여 생긴 오류이다.
User
가 Borad
를 조회하게 되고, 다시 Board
가 User
를 조회하게 된다. 이게 계속 반복되어 무한 루프가 발생하게 된 것이다.
@JsonIdentityInfo
또는 @JsonIgnore
를 사용해서 해결할 수 있다.
// @JsonIdentityInfo 사용
public class Board {
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
private User user;
}
// @JsonIgnore 사용
public class Board {
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIgnore
private User user;
}