【问题标题】:Creating a JSON body parameter for retrofit POST request为改造 POST 请求创建 JSON 正文参数
【发布时间】:2019-04-27 13:20:41
【问题描述】:

我必须使用以下数据通过改造创建一个 POST 请求。我尝试创建一个类似于示例中提供的主体,但在尝试了多种方法后,我仍然收到错误请求。我想知道我做错了什么?

此字段需要发送到类型为 CreateShipmentDetails[] 的 api

这是我正在尝试创建的示例正文

  {
   "Shipments": [
       {
         "Shipper": {
            "Name": " DEMO ACCOUNT",
            "ContactPerson": "DEMO ACCOUNT",
            "Address1": "Block C, 3A01 & 3A02,",
            "Address2": "Level 3A, Kelana Square,",
            "Address3": "No.17, Jalan SS7/26",
            "Postcode": "47301",
            "City": "Petaling Jaya",
            "State": "Selangor",
            "CountryCode": "MY",
            "Phone1": "+60378038830"
        },
        "Consignee": {
            "ContactPerson": "LWE (AU) Ltd.",
            "Address1": "Test Address 1",
            "Address2": "Test Address 2",
            "Postcode": "70000",
            "City": "JOHOR BHARU",
            "State": "SELANGOR",
            "CountryCode": "MY",
            "Phone1": "03-8888888"
        },
        "Items": [
            {
                "Description": "item1",
                "Quantity": 10,
                "UnitValue": 20.0,
                "HSCode": "30",
                "SKU": "40",
                "Url": "50"
            }
        ],
        "Packages": [
            {
                "PackageReference": "pkg1",
                "Length": 10.0,
                "Width": 20.0,
                "Height": 30.0,
                "ActualWeight": 40.0
            }
        ],
        "PackageType": "SPX",
        "WeightType": "KG",
        "ShipmentDate": "2018-07-01T00:00:00+08:00",
        "TOSMode": "MY-E-EXPRESS",
        "CurrencyCode": "MYR"
    }
]
}

这是我为 CreateShipmentDetails 创建的模型

public class CreateShipmentDetails {

@SerializedName("Shipper")
@Expose
private Object Shipper;
@SerializedName("Consignee")
@Expose
private Object Consignee;
@SerializedName("Items")
@Expose
private List<ItemInfo> Items;
@SerializedName("Packages")
@Expose
private List<PakageInfo> Packages;
@SerializedName("ShipmentDate")
@Expose
private Date ShipmentDate;
@SerializedName("TOSMode")
@Expose
private String TOSMode;
@SerializedName("ReferenceNo")
@Expose
private String ReferenceNo;
@SerializedName("ReferenceSource")
@Expose
private String ReferenceSource;
@SerializedName("PackageType")
@Expose
private String PackageType;
@SerializedName("WeightType")
@Expose
private String WeightType;
@SerializedName("CurrencyCode")
@Expose
private String CurrencyCode;
@SerializedName("Remarks")
@Expose
private String Remarks;
@SerializedName("HawbNo")
@Expose
private String HawbNo;



public Object getShipper() {
    return Shipper;
}

public void setShipper(Object shipper) {
    Shipper = shipper;
}

public Object getConsignee() {
    return Consignee;
}

public void setConsignee(Object consignee) {
    Consignee = consignee;
}

public List<ItemInfo> getItems() {
    return Items;
}

public void setItems(List<ItemInfo> items) {
    Items = items;
}

public List<PakageInfo> getPackages() {
    return Packages;
}

public void setPackages(List<PakageInfo> packages) {
    Packages = packages;
}

public Date getShipmentDate() {
    return ShipmentDate;
}

public void setShipmentDate(Date shipmentDate) {
    ShipmentDate = shipmentDate;
}

public String getTOSMode() {
    return TOSMode;
}

public void setTOSMode(String TOSMode) {
    this.TOSMode = TOSMode;
}

public String getReferenceNo() {
    return ReferenceNo;
}

public void setReferenceNo(String referenceNo) {
    ReferenceNo = referenceNo;
}

public String getReferenceSource() {
    return ReferenceSource;
}

public void setReferenceSource(String referenceSource) {
    ReferenceSource = referenceSource;
}

public String getPackageType() {
    return PackageType;
}

public void setPackageType(String packageType) {
    PackageType = packageType;
}

public String getWeightType() {
    return WeightType;
}

public void setWeightType(String weightType) {
    WeightType = weightType;
}

public String getCurrencyCode() {
    return CurrencyCode;
}

public void setCurrencyCode(String currencyCode) {
    CurrencyCode = currencyCode;
}

public String getRemarks() {
    return Remarks;
}

public void setRemarks(String remarks) {
    Remarks = remarks;
}

public String getHawbNo() {
    return HawbNo;
}

public void setHawbNo(String hawbNo) {
    HawbNo = hawbNo;
}
}

这是我的接口类 公共接口接口API {

@FormUrlEncoded
@POST("Create")
Call<List> Create(@Field("Shipments") List<CreateShipmentDetails> Shipments);
}

这就是我创建 The Call 的地方

    Call<List> call = APIClient.getInstance().getApiInterface().Create(shipments);
            call.enqueue(new Callback<List>() {
               @Override
               public void onResponse(Call<List> call, Response<List> response) {
                   Log.e("Response", response.message());
               }

               @Override
               public void onFailure(Call<List> call, Throwable t) {
                   Log.e("Failure :", t.getMessage());

               }
           });

我尝试过使用 List 和 JsonObject,但我一直收到错误。

【问题讨论】:

  • 你应该使用@Body YourModel body并删除@FormurlEncoded
  • 也使用 www.jsonschema2pojo.com 来生成你的 pojo 类。

标签: java android json android-studio retrofit


【解决方案1】:

问题出在您的 pojo 模型类中。您用于 Shipper 和 Consignee 的数据类型是 Object 这是错误的,因为这两个键分别具有一个类模型。所以代码会是这样的。

    public class CreateShipmentDetails {

    @SerializedName("Shipper")
    @Expose
    private Shipper shipper;
    @SerializedName("Consignee")
    @Expose
    private Consignee consignee;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2020-06-14
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多