일정 관리 앱 만들기 프로젝트를 진행하면서
만든 첫 API 를 테스트 하던 중 에러 상황이 발생했다.
DB에 데이터는 잘 저장됐는데,,,
잘못된 응답이 반환되었다.
406 Not Acceptable
콘솔 에러:
Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
일단 콘솔 에러에 적힌 메시지를 서치 해봤다.
요약하면 이러한데
org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation 예외는 클라이언트가 서버에서 처리할 수 없는 Accept 헤더를 포함한 요청을 보낼 때 발생합니다.
클라이언트가 특정 콘텐츠 타입(JSON, XML 등)을 요청했지만 서버가 이를 처리할 수 없는 경우 발생할 수 있습니다.
예외를 해결하기 위한 방법
1. 클라이언트 요청의 Accept 헤더 확인:
- 요청 헤더에 Accept: application/json 추가
2. 컨트롤러 메소드의 어노테이션 확인:
@RestController 또는 @ResponseBody 누락 여부 확인
3. 의존성 확인
dependencies 에 spring-boot-starter-web 누락 여부 확인
jackson 의존성 포함 여부 확인
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.springframework.boot:spring-boot-starter-web'
3가지 방법 모두 시도해봤으나
상황은 달라지지 않았다...
강의 실습 코드와 프로젝트 코드를 일일이 비교해가던 중
문제 원인을 찾을 수 있었는데....
문제 발생 원인: responseDTO의 @Getter 어노테이션 누락
문제 코드
@AllArgsConstructor
public class TodoResponseDTO {
private Long id;
private String title;
private String contents;
private String author;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
...
}
수정된 코드
@Getter // 추가
@AllArgsConstructor
public class TodoResponseDTO {
private Long id;
private String title;
private String contents;
private String author;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
...
}
결과도 잘 나온다.
사실 조금 어이가 없었다.
원인을 못찾아서 시간을 많이 허비했는데,,,
저 @Getter 한줄이 문제 였다니...
내부적 원인
Spring에서 JSON으로 변환(Jackson 직렬화)을 할 때는 반드시 getter 메서드가 있어야 필드 값을 읽을 수 있다
고 한다...
@Getter를 안 붙이면 필드에 접근할 방법이 없어서 Jackson이 비어 있는 응답을 만들려고 하다가 결국 “적절한 표현이 없다”고 HttpMediaTypeNotAcceptableException 예외를 던진다 고.....
그게 406 응답이었던 것이다.
그래도 이번 삽질 덕에,, 앞으로 @Getter 를 빼먹는 일은 없을 것 같다....😂😂😂
'Spring > 문제 해결 (Troubleshooting)' 카테고리의 다른 글
@ControllerAdvice가 Filter 예외를 잡지 못하는 문제 해결 (0) | 2025.06.04 |
---|---|
Spring Security 에러 핸들링 오류 해결, /error 접근 권한 문제 (0) | 2025.05.29 |
@LastModifiedDate 와 DB의 ON UPDATE CURRENT_TIMESTAMP 동시 사용 문제 (1) | 2025.05.23 |
JPA 변경사항이 즉시 반영되지 않을 때 - 영속성 컨텍스트와 DB 값 불일치 문제 (1) | 2025.05.23 |
Caused by: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName. (0) | 2025.05.12 |