-
[안드로이드 kotlin] retrofit 으로 내용이 비어있는 jsonoObject 요청 보내기안드로이드(kotlin)/기능 관련 2021. 12. 12. 14:58
retrofit 을 이용해서 서버와 통신 작업을 하는데 서버 개발자가 전달해준 API 명세서에 요청 항목의 내용이 비어있었습니다.
요청 내용이 없으므로 @Body 를 쓰지 않고 @POST request 하였습니다.
이렇게 보내니까 서버에서 응답은 왔으나 400번 코드를 보내왔습니다.
뭐가 문제인가 싶어서 postman 으로 body 내용을 비우고 URL 로 요청을 보냈으나 아래처럼 에러 메세지를 출력했습니다.
body 를 비우고 보낸게 문제인가 싶어서 {} 를 붙여 보니까 제대로 된 응답이 나타나네요.
request 할 때 비어있는 jsonobject 만 요청하려면 어떻게 해야할지를 찾아보았습니다.
여러가지 검색해보니 아래 내용을 새로운 클래스에 담아서 @Body 에 적용해주면 될 것 같습니다.
<InstallTypeReqData.kt>
class InstallTypeReqData( val body: RequestBody = RequestBody.create(MediaType.parse("application/json; charset=UTF-8"), "{}") )
<변경하기 전에 보낸 형식 - interface 에 작성한 내용>
@POST("/installTypeList") fun getInstallType(): Call<InstallTypeResData>
<변경해서 보낸 형식 - interface 에 작성한 내용>
@POST("/installTypeList") fun getInstallType(@Body installTypeReqData: InstallTypeReqData): Call<InstallTypeResData>
interface 메소드 @Body 에 새로 생성한 내용을 적용시켜주고 실행할 곳에서 해당 내용을 넣어줍니다.
<실행한 내용>
val retrofit = Retrofit.Builder() .baseUrl(CommonData.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() val api = retrofit.create(ServerAPI::class.java) val getInstallType = api.getInstallType(InstallTypeReqData()) getInstallType.enqueue(object : Callback<InstallTypeResData> { override fun onResponse( call: Call<InstallTypeResData>, response: Response<InstallTypeResData>, ) { ... })
interface에서 선언한 getInstallType 메소드의 매개변수로 InstallTypeReqData() 를 넣어서 요청하니까 200번 코드로 이상없이 잘 나타납니다.
내용이 비어있는 jsonObject 를 보내야만 하는 경우라면 위에서 만든 RequestBody 를 이용해야 할 것 같습니다.
'안드로이드(kotlin) > 기능 관련' 카테고리의 다른 글
[안드로이드 kotlin] webview 버튼 선택시 외부 브라우저가 실행되지 않도록 하기 (0) 2022.09.23 [안드로이드 kotlin] camera, gallery URI 확인 및 주의할 점 (0) 2022.04.12 [안드로이드 kotlin] 소프트 키보드 내리기(activity, custom dialog) (0) 2021.05.04 [안드로이드 kotlin] 토스트 메시지 사용하기 (0) 2020.01.04 [안드로이드 kotlin] MediaPlayer 와 SoundPool (0) 2019.12.19