[Kotlin] [에러해결] Retrofit (레트로핏) post 방식 Content-Type 확인
문제 발생
Postman 도 api 가 잘 된다. iOS도 잘 된다.
근데 나만 안된다.
Okhttp log를 보니 자꾸 500 Error 가 떨어졌다.
파라미터를 잘 못담아 보낼 때도 저랬는데, 암튼 다 되는데 나만 안되는거면 레트로핏으로 보낼 때의 문제가 있다는 것이다.
Content-Type : application/json; charset=UTF-8 이 문제였다.
예전 프로젝트 POST 방식과 비교해보니,
아예 명시적으로 Content-Type 을 application/json 으로 넣어서 보내주었다.
@Hearders 미입력
-> POST http://1.214.117.218:8888/login 2023-03-16 09:55:51.843 30434-30520 I/okhttp.OkHttpClient: Content-Type: application/json; charset=UTF-8 2023-03-16 09:55:51.843 30434-30520 I/okhttp.OkHttpClient: Content-Length: 51 2023-03-16 09:55:51.843 30434-30520 I/okhttp.OkHttpClient: {"email":"a@abc.com","pwd":"1234","vender":"email"} 2023-03-16 09:55:51.843 30434-30520 I/okhttp.OkHttpClient: --> END POST (51-byte body)
@Hearders 입력
-> POST http://1.214.117.218:8888/login 2023-03-16 09:56:34.874 30562-30621 I/okhttp.OkHttpClient: Content-Type: application/json 2023-03-16 09:56:34.874 30562-30621 I/okhttp.OkHttpClient: Content-Length: 51 2023-03-16 09:56:34.874 30562-30621 I/okhttp.OkHttpClient: {"email":"a@abc.com","pwd":"1234","vender":"email"} 2023-03-16 09:56:34.874 30562-30621 I/okhttp.OkHttpClient: --> END POST (51-byte body)
Retrofit post 방식은 @Hearders 생략시,
기본으로 Content-Type : application/json; charset=UTF-8 로 보내는 것을 확인하였다!
문제 해결
http 응답을 받는 곳에서 charset=UTF-8도 받도록 처리를 해주면 문제없이 가겠지만,
현재는 Only Content-Type : application/json 로만 받아야 처리를 해주도록 되어있다고 되어 있어 명시적으로 기재하도록 수정하였다.
@Headers("Content-Type: application/json") // 추가
@POST("login")
suspend fun login(@Body reqEmailPwData: RequestEmailPwData): Result<RemoteDefaultData>