Spring
ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
지화자_
2024. 11. 5. 17:55
채팅 기능 생성 API 요청 중 문제가 발생했다.
ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
분명 DB에는 잘 들어갔는데 뭐가 문제일까? DB 저장까진 문제가 없다는 말은 response를 반환하는 과정에서 문제가 발생했다고 생각했다.
No acceptable representation 표현을 받아들일 수 없다는 말인데 response에 해당하는 것은 DTO이기에
DTO에서 문제가 발생한 것이라 생각했다.
그리고, ResponseDTO에 @Getter를 뺴놓은 것을 확인했다. 이를 추가하여 문제를 해결했다.
ResponseEntity에서 응답을 반환할 때, JSON 형식으로 반환하게 되는데 이때, get()을 활용한다. 그리고 이 과정을 JSON 직렬화라고 부른다.
JSON 직렬화
JSON 직렬화란 객체를 JSON 형식의 문자열로 변환하는 과정. JSON(JavaScript Object Notation)은 경량 데이터 교환 형식으로, 사람과 기계가 모두 읽고 쓰기 쉬운 형태이며 JSON 직렬화는 주로 데이터 전송, 저장, 또는 API 통신에서 사용.
- ObjectMapper를 사용하여 Java 객체를 JSON으로 변환
- 기본적으로 public 필드를 직접 접근하여 직렬화
- private 필드의 경우 Getter 메서드를 통해 값을 읽어 직렬화
- Getter 메서드명에서 'get'을 제거하고 첫 문자를 소문자로 변환하여 필드명을 유추
역직렬화
반면 역직렬화란 JSON 형식의 문자열을 Java 객체로 변환하는 것을 말한다.
- ObjectMapper의 readValue() 메서드를 사용하여 JSON을 Java 객체로 변환
- 기본적으로 public 필드에 직접 값을 할당
- private 필드의 경우 Setter 메서드를 통해 값을 설정 or @JsonProperty를 통해 설정
- 모든 인자를 받는 생성자에 @ConstructorProperties 어노테이션이 있으면 해당 생성자를 사용
- @ConstructorProperties 어노테이션이 없으면 기본 생성자를 사용