-
[TIL] DTO에 왜 @Getter 어노테이션이 필요할까...?TIL(Today I Learned) 2023. 1. 18. 23:52
*20230118의 회고
1. 오늘 마주한 문제
- 심화 팀 프로젝트를 진행하다가 아래와 같은 에러 메세지를 마주하였다.
에러메세지를 가져와보면 이렇다.
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.market9.dto.SellerResponseDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
2. 해결방법
- @Getter 어노테이션을 DTO 클래스에 붙여주니 에러메세지가 사라지고 잘 실행되었다.
3. 의문점
- 그런데 구현한 로직 중 DTO 에서 getter 메서드를 써서 값을 가져오는 경우는 없었는데, 왜 @Getter 가 필요한걸까...?
아래에 알게된 그 이유들을 정리해보겠다!
4. DTO 에 @Getter 어노테이션이 필요한 이유
- 스프링 부트는 jackson 라이브러리를 사용한다.
- jackson 라이브러리는 json 데이터 구조를 처리해주는 라이브러리이다.
- 따라서 스프링 부트는 jackson 라이브러리를 통하여 json 데이터를 직렬화 / 역직렬화를 한다.
- 여기서 직렬화는 Object -> JSON, 역직렬화는 JSON -> Object 를 수행하는 과정이다.
- jackson 에서 직렬화를 통해 Object -> JSON 과정을 수행할 때, Getter 메소드를 사용한다!
- 즉 DTO 를 JSON 데이터로 가공할때 Getter 가 필요하다는 말씀!
- 그렇기에 DTO 클래스에도 @Getter 어노테이션을 붙여줘야 한다!
+참고할만한 링크
https://tedblob.com/jackson-jsonmappingexception-no-serializer-found-for-class/
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] Controller 에서 Entity 를 그냥 반환하면 안되는 이유 2가지 (0) 2023.01.30 [TIL] 엔티티와 테이블의 차이 (0) 2023.01.26 [TIL] 인프런 JPA 프로그래밍 기본 강의내용 요약 (0) 2023.01.17 [TIL] 에라토스테네스의 체(소수 찾기) (0) 2023.01.13 [TIL] Deque 자료구조 (0) 2023.01.11