HttpMediaTypeNotAcceptableException 예외는 클라이언트가 요청한 것과 실제로 생성할 수 있는 것이 다를 경우 발생한다고 한다.
즉, 핸들러 메소드가 클라이언트가 요청한 Type으로 응답으로 내려줄 수 없는 것이 원인이였다.
406 Not Acceptable
하이퍼텍스트 전송 프로토콜(HTTP)의 406 Not Acceptable 클라이언트 에러 응답 코드는 서버가 요청의 주도적인 콘텐츠 협상 헤더에 정의된 허용 가능한 값 목록과 일치하는 응답을 생성할 수 없으며, 서버가 기본 표현을 제공하지 않음을 나타냅니다.
-MDN Web Docs-
서버가 요청한 타입의 응답을 생성하지 못할 때 발생하는 에러이다.
나의 경우에는 ResponseDto에 @Getter
가 없어 값에 접근하지 못해 발생한 문제였다.
ResponseDto
@Getter
public class ResponseDto<T> {
private final String status;
private T data;
private final String message;
private final String dateTime;
@Builder
public ResponseDto (String status, T data, String message, String dateTime) {
this.status = status;
this.data = data;
this.message = message;
this.dateTime = dateTime == null ? LocalDateTime.now().toString() : dateTime;
}
public static<T> ResponseDto<?> success200() {
return ResponseDto.builder()
.status("200")
.message("OK")
.build();
}
public static<T> ResponseDto<?> success200(T data) {
return ResponseDto.builder()
.status("200")
.data(data)
.message("OK")
.build();
}
}
ResponseDto에 @Getter
를 추가 해주어 해결할 수 있었다.