엔티티 json 변환시 생겼던 문제

2020. 1. 18. 08:59·Spring
Entity1

이 엔티티를 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 클래스를 만드는거에요.


Entity3

도메인 객체를 JSON으로 변환하는 메소드에서 Set products 필드는 쓰지 않아요. 그래서 사용이 되는 필드로만 구성해서 DTO 클래스를 만들었고 이 클래스를 이용해 JSON 데이터로 바꾸니 이상이 없었어요!


DTO를 만들때 일일이 프로퍼티를 카피해 주는 방법과 리플렉션을 이용한 방법이 있다고 해요. 근데 리플렉션을 이용한 방법은 성능상의 이유로 기피된다고 하네요. getClass().getName() 이런식으로 구성해야 해서 그런가... 여튼 그렇다네요.


@JSONIgnore 를 이용했어요.


Entity2

이 어노테이션의 원리? 동작원리는 모르겠어요. 도메인 객체에서 Set 부분에 붙여주니 더이상 오류가 나지 않았어요. JSON 형식으로 변환할때 이 필드는 무시하고 만들 수 있게 도와주는 어노테이션인가봐요!! 하하!


jackson-datatype-hibernate 를 이용한 방법


{% codeblock %}

com.fasterxml.jackson.datatype jackson-datatype-hibernate4 2.9.0

{% endcodeblock %}


이걸 추가해주고 해결하는 방법이 있다는데. 시간관계상 이거에 대해선 포스팅 하지 않겠습니다... 직접 알아보세요! ㅎㅎ


이상으로 포스팅을 마칠게요! 뿅!

반응형
'Spring' 카테고리의 다른 글
  • JPA findOne, getOne 차이점
  • JPQL @Query 2개 이상 프로젝션 리턴
  • Application Context 에 대해서
  • NamedParameterJdbcTemplate
Jadie Blog
Jadie Blog
  • Jadie Blog
    Jadie
    Jadie Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • OOP (7)
      • DDD (1)
      • JAVA (8)
      • Spring (12)
      • Kafka (1)
      • TDD,Test (4)
      • Basic (1)
      • ETC (1)
      • MySQL (0)
      • Javascript (0)
      • Spark (3)
      • Infra (2)
      • Algorithm (0)
      • Network (1)
      • Jobs (0)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 휴튼
  • 공지사항

  • 인기 글

  • 태그

    캡슐화
    객체지향
    Kafka
    HTTP #HTTPS
    Transactional Outbox
    글또
    의존역전원칙
    OOP
    MASTER
    API문서
    우아한스터디
    routingdatasource
    객체지향사실과오해
    springboot
    java
    OAuth2 #Spring
    MSA
    Spring
    Resilience4jFeign
    entitymanager
    JPQL
    jpa
    JAVA #IO
    테스트
    localdatetime
    추상클래스 #인터페이스
    Spring #ApplicationContext
    slave
    Test
    메시징시스템
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jadie Blog
엔티티 json 변환시 생겼던 문제
상단으로

티스토리툴바