本文介绍了发送 ArrayList<Object>带有改造的 POST 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想把这样的东西发送到服务器

I want to send something like this to server

{
  "InoorPersonID": "",
  "Discount": 0,
  "DiscountDescription": "",
  "Description": "",
  "OrderDetailList": [
    {
      "ProductID": 0,
      "Amount": 0
    }
  ],
  "ClientId": "",
  "ClientSecret": ""
}

这是我的服务接口

public interface StoreRetrofitSalesService {

    @FormUrlEncoded
    @POST(ServiceUrl.URL_ORDER_SET)
    Call<ServiceResult<Integer>> orderSet(@Field("OrderDetailList") ArrayList<OrderDetail> orderDetails,
                                          @Field("Discount") String discount,
                                          @Field("ClientId") String clientId,
                                          @Field("ClientSecret") String clientSecret,
                                          @Field("Description") String description,
                                          @Field("InoorPersonID") String inoorPersonId,
                                          @Field("DiscountDescription") String discountDescription);

}

logcat 显示这个

The logcat show this

OrderDetailList=org.crcis.noorreader.store.OrderDetail%408208296&Discount=0&...

我有两个问题:

  1. 为什么 OrderDetailList 无法转换为 JSON.
  2. 我如何为这个参数使用@FieldMap.我最近测试了 Map 但它返回相同的结果.
  1. Why OrderDetailList can't convert to JSON.
  2. How can I use @FieldMap for this params.I recently test Map<String, Object> but it returns same result.

谢谢

推荐答案

使用 GSON

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(myBaseUrl)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

像这样为您的数据创建一个模型

Create a model for your data like this

public class Order {

    @SerializedName("InoorPersonID")
    String inoorPersonId;
    @SerializedName("Discount")
    int discount;
    @SerializedName("DiscountDescription")
    String discountDescription;
    @SerializedName("Description")
    String description;
    @SerializedName("OrderDetailList")
    ArrayList<OrderDetail> orderDetailList;
    @SerializedName("ClientId")
    String clientId;
    @SerializedName("ClientSecret")
    String clientSecret;

    //Don't forget to create/generate the getter and setter
}

并将您的服务更改为

public interface StoreRetrofitSalesService {

    @POST(ServiceUrl.URL_ORDER_SET)
    Call<ServiceResult<Integer>> orderSet(@Body Order order);

}

这篇关于发送 ArrayList<Object>带有改造的 POST 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-30 23:29
查看更多