Android/Android Studio

[Kotlin] [에러해결] Retrofit (레트로핏) post 방식 Content-Type 확인

MK_____ 2023. 3. 16. 10:59
문제 발생

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>