히콩쓰 개발 일지
Spring Boot 프로젝트 Dto 사용 시 HTTP 406 Error 해결 방법! 본문
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 문제를 해결할 수 있었다😙
'Spring' 카테고리의 다른 글
[Spring Security] 권한을 올바르게 설정했는데 403 에러가 날 경우 고려해야 할 점 (2) | 2023.12.12 |
---|---|
Controller Test 403 forbidden 해결 (1) | 2023.12.05 |
Primitive Type(원시타입)과 Wrapper Class(래퍼 클래스) 의 Getter (1) | 2023.11.22 |
@ReqestBody String 사용 시 Json이 그대로 입력되는 이유 (1) | 2023.11.14 |
[Consider declaring it as object wrapper for the corresponding primitive type] 발생 원인과 해결 방법 (0) | 2023.11.10 |