[스프링 부트] could not find acceptable representation - no acceptable representation 406 에러
Spring boot, 스프링 부트 에러 해결, httpmediatypenotacceptableexception
Spring Boot에서 API 개발 중 HttpMediaTypeNotAcceptableException
발생..
컨트롤러에서 JSON 응답을 반환할 때
이 발생할 수 있다고 합니다.
1. 예외 설명
- HttpMediaTypeNotAcceptableException
- 클라이언트가 요청한
Accept
헤더와
서버가 응답 가능한 미디어 타입이 일치하지 않을 때 발생합니다. - 예시:
클라이언트가Accept: application/json
으로 요청했으나
서버가 객체를 JSON으로 변환하지 못할 때
- 클라이언트가 요청한
2. 자주 발생하는 원인: 응답 객체에 Getter 없음
- 반환 객체에
@Getter
(Lombok), 혹은 getter 메소드가 없을 때
Jackson이 해당 객체를 JSON으로 변환하지 못해 예외가 발생
문제 예시
public class ApiResponse {
private String result;
// Getter 없음
}
이유
Jackson(ObjectMapper)은 getter 메소드가 없으면 필드 값을 읽을 수 없어 JSON으로 직렬화할 수 없습니다.
3. 문제 해결 방법
Lombok 어노테이션 사용
@Getter
@AllArgsConstructor
public class ApiResponse {
private String result;
}
직접 getter 메소드 추가
public class ApiResponse {
private String result;
public String getResult() {
return result;
}
}
4. 점검 체크리스트
- DTO, 응답 객체에
@Getter
또는 getter 메소드가 있는지 확인 - 필요하다면
@Data
(Lombok)로 일괄 적용 가능 - JSON 직렬화가 필요한 객체는 getter가 반드시 있어야 함
5. 추가 팁
- private 필드만 있고 getter가 없으면 직렬화 불가
- 만약 JSON이 아니라 뷰 렌더링(Thymeleaf, JSP 등)이라면 별도의 오류 메시지가 나올 수 있음
6. 결론
HttpMediaTypeNotAcceptableException
이 발생하면, 응답 객체의 getter(혹은 Lombok 어노테이션)가 빠져있는지 점검!- getter를 추가하면 대부분 정상적으로 JSON 응답이 반환됩니다.