아래 소스 코드와 같이 간단하게 돌려보면 아래와 같은 에러를 볼 수 있다.
에러 메세지 접기
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: A["bs"]->java.util.ArrayList[0]->B["a"]->A["
bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[
0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.
util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]-
>A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayL
ist[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->j
ava.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["
a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Ar
rayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"
]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]-
>B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.uti
l.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A[
"bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList
[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java
.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]
->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Array
List[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->
java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B[
"a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.A
rrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs
"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]
->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.ut
il.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A
["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayLis
t[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->jav
a.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"
]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Arra
yList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]-
>java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B
["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.
ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["b
s"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0
]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.u
til.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->
A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayLi
st[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->ja
va.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a
"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Arr
ayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]
->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->
B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util
.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["
bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[
0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.
util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]-
>A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayL
ist[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->j
ava.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["
a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Ar
rayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"
]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]-
>B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.uti
l.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A[
"bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList
[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java
.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]
->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Array
List[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->
java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B[
"a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.A
rrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs
"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]
->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.ut
il.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A
["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayLis
t[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->jav
a.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"
]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.Arra
yList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]-
>java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B
["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.
ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["b
s"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"]->java.util.ArrayList[0]->B["a"]->A["bs"])
에러 메세지 접기 A 객체의 bs 속성(List)을 보고 B 객체의 A 객체를 보고 다시 A 객체의 bs 속성을 보고 무한으로 반복 된다.
그러다가 최종적으로 java.lang.StackOverflowError 가 떨어지게 된다.
순환 참조를 하지 말아야 하는 속성에 @JsonBackReference 어노테이션을 달아주자.
다시 테스트 해보면 아래와 같이 B 의 a 속성을 출력하지 않게 된다.