본문 바로가기
안드로이드/오픈소스

Retrofit2 알아보기 2 - @POST 사용

by 안드뽀개기 2022. 1. 3.
반응형

안녕하세요?
저번 포스팅에서는 Retrofit의 GET 방식에 대해서 알아봤었습니다. 이번에는 POST 방식에 대해서 알아보겠습니다.

POST 메소드로 통신하는 방법은 3가지가 있습니다.

 

 

@Body(Raw  Data 방식)

 @Body 어노테이션은 데이터를 Java Object를 JSON형태로 만들어 서버에 전송합니다.  

 

@POST 어노테이션을 작성하고 괄호안에 baseUrl에 붙일 요청 url의 주소를 작성합니다.

예를들면, 요청하고자 하는 주소가 www.tstory.com/dev/login 라고 가정하면, baseUrl은 www.tstory.com/dev 혹은 www.tstory.com/dev/ 이고, @POST 괄호안에 들어갈 내용은 /login 혹은 login이 되겠습니다.

Request 파라미터를 객체(SignUpParameter)로 만들어 서버에 전송하고 응답을 객체(SignUpResponse)로 전달받습니다. 여기서 Single<SignUpResponse>는 SignUpResponse객체를 Observable 형태로 리턴받겠다는 의미입니다.

 

여기서 @SerializedName 어노테이션의 괄호안의 값은 객체를 직렬화 및 역직렬화 할 때 이름으로 사용됩니다.

만약 응답이 다음과 같다면, SignUpResponse클래스의 변수명과 json의 변수명을 일치시켜줘야 합니다. 하지만 SignUpResponse클래스의 변수명을 다른 이름으로 명하고 싶다면, @SerializedName 어노테이션의 괄호안 값을  json의 변수명과 일치시켜주면 역직렬화가 가능해집니다.

 

 

@FormUrlEncoded @Field

application/json과  application/x-www-form-urlencoded 두 가지 content-type의 차이점을 조사해본 내용은 다음과 같습니다.

application/json의 경우 { key : value } 형태로 전송 되며, application/x-www-form-urlencoded의 경우는 key1=value1&key=value2의 형식으로 전송됩니다. 이 외에도 데이터의 압축 여부 등으로 인한 크기의 차이점이 존재합니다. 

 

 

두번째 POST 방식은 application/x-www-form-urlencoded의 형식으로 요청을 보내기 위해 @FormUrlEncoded와 @Field 어노테이션을 사용합니다.

 

위의 @Body 방식에서 interface를 다음과 같이 작성할 수 있습니다. @Body 방식과 차이점은 Object를 직렬화 하여 json형식으로 변환하여 요청하는것과 달리 @FormUrlEncoded 방식은 각각의 데이터를 @Field 어노테이션을 붙여 파라미터로 값을 전달하여, key1=value1&key=value2의 형식으로 변환하여 서버에 요청을 날릴 것 입니다.

@FormUrlEncoded @FieldMap(FormData 방식)

세번째 방법은 두번째 방법에서 @Field 어노테이션을 붙여 파라미터로 전달한 값들을 @FieldMap 어노테이션을 붙인 Map 객체로 전달하는 방식입니다.

 

여기까지 @POST 방식으로 서버에 요청하는 3가지 방법을 알아봤습니다. 위의 코드를 참고해 서버 개발 환경에 맞춰 개발하실때 hearder 등을 설정하시면 되겠습니다.

다음 글에서는 이미지, 오디오 파일등을 업로드 하는 Multipart에 대해서 알아보겠습니다.

반응형