TIL

20230116 TIL 컨트롤러 테스트에서 406 error가 발생하는 경우

jiwoosmile 2023. 1. 16. 19:10

 

https://webhostingmedia.net/wp-content/uploads/2017/01/http-error-406-not-acceptable.png

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를 제대로 만들었는지 꼭 확인하도록 하자!