Kotlin @Body와 @Field 차이
Mobile/Kotlin

Kotlin @Body와 @Field 차이

뉴비뉴 2022. 4. 12.

안녕하세요,

 

오늘은 Body와 Field의 차이를 알아보겠습니다.

@Headers("content-type: application/json")
@POST("/api/auth/signup/")
fun createUser(
    @Body jsonParams:SignUpResponse,
): Call<SignUpResponse>

@Body
-
@Field

@FormUrlEncoded
@POST("/api/auth/signin")
fun userLogin(
    @Field("email") email:String,
    @Field("password") password:String
): Call<LoginResponse>

@Field는 위 예시의 아래와 같이 FormUrlencoded를 수행합니다. 한마디로 통신 간에 보안에 신경쓰는 것으로 보이는 상황입니다.

그리하여 아래 사진과 같은 결과가 출력됩니다. Encoded를 했기 때문이죠. (%40)

한마디로 보안을 위해 url을 붙이지 않고, 파라미터를 숨겨@FormUrlEncoded 를 사용합니다.

인자를 @FormUrlEncoded를 사용해서 전달합니다. (key=value&key=value)

Body는 Json 형태의 하나의 객체만 전달합니다. {key: value, key: value} 보통 이런식의 통신이 일반적입니다.

그 다음 data class를 생성합니다.

data class SignUpResponse(val email:String, val password: String)

-

val api = Api.create()
val data = SignUpResponse(email, password1)
    api.createUser(data).enqueue(object : Callback<SignUpResponse> {
    // 위에서 백엔드와 통신이 이뤄진다. 
    // 통신의 결과를 아래에서 Response, Failure 출력한다.
        override fun onResponse(
            call: Call<SignUpResponse>,
            response: Response<SignUpResponse>
        ) {
            Log.d(logSignUp, "Email, Password onResponse check - ${email}, ${password1}, ${password2}")
            Log.d(logSignUp, "Success")
        }
        override fun onFailure(call: Call<SignUpResponse>, t: Throwable) {
            Log.d(logSignUp, "Email, Password onFailure check - ${email}, ${password1}, ${password2}")
            Log.d(logSignUp, "Failed")
        }
    })

삽질 일기는 여기서 마무리하도록 하겠습니다.

결론은 @FormUrlEncoded, @Field 의 경우 Encoded 하여 데이터를 전송하므로 해당 문제가 발생하였고,

@Body를 사용하여 처리하였습니다.

 

https://yuuj.tistory.com/174

 

[Android][Kotlin] Retrofit annotation (@Path, @Query, @Field, @Body)

@Path와 @Query의 차이점 @Path: path variable을 위함 api/member/{username} @Query: query parameter 위함 api/member?username= @Field와 @Query의 차이점 @Query:사용시 파라미터를 url 뒤에 붙여서 전달하는..

yuuj.tistory.com

 

'Mobile > Kotlin' 카테고리의 다른 글

Kotlin - 로그인, 로그아웃 이게 맞을까?  (0) 2022.04.28

댓글

💲 추천 글