-
20230116 TIL 컨트롤러 테스트에서 406 error가 발생하는 경우TIL 2023. 1. 16. 19:10
MockHttpServletResponse: Status = 406 Error message = Acceptable representations: [application/json, application/*+json]. Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Accept:"application/json, application/*+json"] Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = [] Status expected:<200> but was:<406> Expected :200 Actual :406
오늘 API를 만드는 과정에서 컨트롤러 테스트에서 406에러가 발생하였다.
406에러는 400번대 에러이기 때문에 클라이언트 측 잘못이라는 말인데 처음 본 에러코드여서 검색을 해보았다.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406
406 에러 메시지는 Not acceptable이고,
서버가 클라이언트가 받을 수 있는 응답을 생성할 수 없는 경우에 해당한다고 한다.
그런데 컨트롤러 테스트에서 잘못 적었거나 문제가 되는 부분은 없어 보였고,
응답을 생성할 수 없는 이유가 반환하는 DTO와 관련되어있을 수 밖에 없어보여서
문제가 되는 DTO와 다른 DTO와 비교를 해보았고,
문제가 되는 DTO에 getter가 없는 것을 확인했다.
스프링 부트는 Jackson라이브러리를 사용해서 JSON 직렬화와 역직렬화를 한다.
그런데 Jackson 라이브러리는 Java오브젝트 필드 값을 읽거나 쓸 때
getter를 사용하기 때문에 getter가 꼭 필요하다고 한다.
DTO에 꼭 getter를 까먹지 말고 넣고, 406 에러가 뜬 경우 DTO를 제대로 만들었는지 꼭 확인하도록 하자!
'TIL' 카테고리의 다른 글
20230118 TIL 서버에서 외부 API에 요청하기 (0) 2023.01.18 20230117 TIL 환경 변수를 사용하는 jest테스트하기 (0) 2023.01.17 20230115 TIL 머리가 잘 돌아가지 않을 때는 몸을 움직이자 (0) 2023.01.15 20230114 TIL 리소스를 구분하자 (0) 2023.01.14 20230113 TIL 조금씩 조금씩 실력이 늘고 있다 (2) 2023.01.13