Spring
Spring Boot 프로젝트 Dto 사용 시 HTTP 406 Error 해결 방법!
용히콩
2023. 11. 21. 23:44
TO-DO LIST의 CRUD를 구현하던 중, Card
를 선택해 조회하는 API 테스트를 진행했다.POSTMAN
에서 http://localhost:8080/cards/{id}
로 요청을 보냈는데, 406 Not Acceptable Error
가 발생했다.
"406 Not Acceptable" 이란?
서버가 요청의 주도적인 콘텐츠 협상 헤더에 정의된 허용 가능한 값 목록과 일치하는 응답을 생성할 수 없으며, 서버가 기본 표현을 제공하지 않음을 나타낸다.
문제 발생 코드
@AllArgsConstructor
public class CardViewResponseDto {
private String cardTitle;
private String cardContent;
private String userName;
private LocalDateTime cardCreatedAt;
}
발생 원인 분석
Jakson
은 이미 Spring boot를 사용하여 SpringWeb Dependency를 추가할 때 기본적으로 포함되어 있을 것이고, 다른 기능에서Jackson
이 정상적으로 작동했으니,Jackson
라이브러리가 없어서 발생한 오류는 아닐 것으로 추측했다.- 구글링 해보니, 406 에러의 대부분은
@Getter
의 부재로 발생했다.
DTO
객체로 넘겼는데, 왜 Jackson
에서 표현해주지 못한다는 건지 의문이었다.
Jackson이 기본적으로 Getter를 사용해서 (get.attirbute 형식) 데이터를 표현하는데, Getter
가 없으면 접근이 불가능해서 발생한 문제였다❗
해결 방법
@AllArgsConstructor
@Getter
public class CardViewResponseDto {
private String cardTitle;
private String cardContent;
private String userName;
private LocalDateTime cardCreatedAt;
}
위 코드처럼 @Getter
Annotation을 추가하여 406 문제를 해결할 수 있었다😙