티스토리 뷰

반응형

Retrofit2 를 이용해서 POST 를 하고자 할때 크게 3가지 방법이 있다.

 

1. @Part

- @Part 는 파일을 POST 할때 쓰인다(이미지라 가정하고 작성)

- @Part 를 사용하려면 @MultiPart 도 함께 써야한다.

    @Multipart
    @POST("picture/upload")
    Call<ImageResponse> postImage(@Part("key") RequestBody key,
                                  @Part("id") RequestBody id,
                                  @Part("name") RequestBody name,
                                  @Part MultipartBody.Part image);
  private void uploadImage(String mKey, int mId, String mName) {
  		File file = new File(이미지 경로);
        RequestBody key = RequestBody.create(MultipartBody.FORM, mKey);
        RequestBody id = RequestBody.create(MultipartBody.FORM, String.valueOf(id));
        RequestBody name = RequestBody.create(MultipartBody.FORM, name);
        RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);

        MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestBody);
        apiService.postImage(key, id, name, body).enqueue(new Callback<ImageResponse>() {
            @Override
            public void onResponse(Call<ImageResponse> call, Response<ImageResponse> response) {
                Log.d(TAG, "Post image successfully");
            }

            @Override
            public void onFailure(Call<ImageResponse> call, Throwable t) {
                Log.d(TAG, t.toString());
            }
        });
    }

 

 

2. @Field

- @Field 는 form-urlencoded 로 보낼때 사용하므로 @FormUrlEncoded 와 함께 써야한다.

- form-urlencoded 는 key, value 형태로 전달할때 사용함

    @FormUrlEncoded
    @POST("products")
    Call<ProductResponse> postProduct(@Field("key") String key,
                                        @Field("product_id") int product_id,
                                        @Field("option_id") int option_id);
apiService.postProduct(key, product_id, option_id).enqueue(new Callback<ProductResponse>() {
	@Override
	public void onResponse(Call<ProductResponse> call, Response<ProductResponse> response) {
		Log.d(TAG, "RELATION POST SUCCESS");
	}

	@Override
	public void onFailure(Call<ProductResponse> call, Throwable t) {
		Log.d(TAG, t.toString());
	}
});

 

 

3. @Body

- JsonObject 를 통째로 직렬화해서 보낼때 사용한다.

    @POST("cart/save")
    Call<CartResponse> postCart(@Body JsonObject jsonObject);
 private void postCart() {
 
        //Room data
      	CartRepository cartRepository = new CartRepository(getContext());
        List<Cart> cartList = cartRepository.getListCart();

        //현재 시간
        long now = System.currentTimeMillis();
        Date date = new Date(now);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss");
        String formatDate = sdf.format(date);

        JsonObject mainObj = new JsonObject();
        JsonArray cartObj = new JsonArray();
        JsonObject cartSubObj = new JsonObject();
        cartSubObj.addProperty("order_time", formatDate);
        cartSubObj.addProperty("key", "key");
        JsonArray products = new JsonArray();
        for (int i = 0; i < cartList.size(); i++) {
            JsonObject proObj = new JsonObject();
            proObj.addProperty("product_id", cartList.get(i).getItem_id());
            proObj.addProperty("price", cartList.get(i).getItem_price());
            proObj.addProperty("number", cartList.get(i).getItem_number());
            products.add(proObj);
        }
        cartSubObj.add("products", products);
        cartObj.add(cartSubObj);
        mainObj.add("cart_list", cartObj);

        apiService.postCart(mainObj).enqueue(new Callback<CartResponse>() {
            @Override
            public void onResponse(Call<CartResponse> call, Response<CartResponse> response) {
            	Log.d(TAG, "성공");
            }

            @Override
            public void onFailure(Call<CartResponse> call, Throwable t) {
                Log.d(TAG, t.toString());

            }
        });
    }

 

 

- mainObj 확인

{
  "cart_list": [
    {
      "order_time": "20201125-182820",
      "vendor_key": "key",
      "products": [
        {
          "product_id": 2,
          "price": 5800,
          "number": 5
        },
        {
          "product_id": 12,
          "price": 4500,
          "number": 1
        },
        {
          "product_id": 36,
          "price": 7800,
          "number": 2
        }
      ]
    }
  ]
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함
반응형