rails에서 jbuilder사용시 http 406에러

Posted by negabaro kim on Tuesday, February 26, 2019 Tags: http   1 minute read

406에러(Not Acceptable)란?

웹서버가 클라이언트에 보내는 레스폰스에 클라이언트가 처리할수 없는 데이터가 포함되어 있을경우 발생하는 에러

트러블슈팅

서버쪽에 어떠한 문제가 있음 클라이언트쪽 설정과는 관련이 없음

현상

프론트에서는 아래와 같이 axios를 이용해서 get

axios.get(getUrl(endpoint), headers);

백엔드 rails controller에서

def current
  render json: current_user
end

이렇게 보내주면 에러가 발생하지 않음.

그러나 이하와 같이 jbuilder 경유시에는 406에러가 발생함.

def current
end

current.json.jbuilder

json.set!  :current_user do
  json.id  current_user.id
  json.name  current_user.name
end

참고로 POSTMAN에서는 406에러가 안나고 axios.get할때만 에러가 발생함.

원인

rails route설정에 format설정이 없어서 current.json.xx 파일을 찾지못해서 해당 에러가 발생

해결방법

레일즈 route설정에서 아래와 같이 format을 넣어주면 해결

get 'current_user', :to => 'users#current', :as => :current_user, defaults: {format: :json}