이 엔티티를 json 형식으로 html로 보내려고 했는데 아래와 같은 오류가 났어요 ㅠㅠ. pom.xml 에 jackson-databind 도 추가해줬는데 안됐어요...
ERROR 16972 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)
이러한 오류가 났는데 해결하기까지 몇시간을 소모한건지... 오류 메시지를 보면 JSON 형식으로 쓸 수 없다고 나와있어요. (Infinite recursion 은 왜 나오는건지 모르겠어요 ㅠㅠ)
오류의 원인이 되는 부분은 Set
products 부분이에요.
위와 같은 도메인 객체를 JSON 데이터로 바꾸어야 할때 이용할 수 있는 방법을 소개해 볼게요!
Set 부분을 빼고 DTO 클래스를 만드는거에요.
도메인 객체를 JSON으로 변환하는 메소드에서 Set
DTO를 만들때 일일이 프로퍼티를 카피해 주는 방법과 리플렉션을 이용한 방법이 있다고 해요. 근데 리플렉션을 이용한 방법은 성능상의 이유로 기피된다고 하네요. getClass().getName() 이런식으로 구성해야 해서 그런가... 여튼 그렇다네요.
@JSONIgnore 를 이용했어요.
이 어노테이션의 원리? 동작원리는 모르겠어요. 도메인 객체에서 Set 부분에 붙여주니 더이상 오류가 나지 않았어요. JSON 형식으로 변환할때 이 필드는 무시하고 만들 수 있게 도와주는 어노테이션인가봐요!! 하하!
jackson-datatype-hibernate 를 이용한 방법
{% codeblock %}
{% endcodeblock %}
이걸 추가해주고 해결하는 방법이 있다는데. 시간관계상 이거에 대해선 포스팅 하지 않겠습니다... 직접 알아보세요! ㅎㅎ
이상으로 포스팅을 마칠게요! 뿅!