我必须以以下模型发送数据:

{
"TransactionType": "testType",
"TransactionReference": "testSectionReference",
"TransactionDate": "2018-10-22T06:22:30.632Z",
"TransactionLines": [
{
  "ProductReference": "testProductReference",
  "ShipDate": "2018-10-22T06:22:30.632Z",
  "Quantity": 1,
  "AwardAmount": 2.0,
  "TotalAmount": 3.0
}
]
}


我通过创建transactionBody来做到这一点,我将其作为主体发送到请求中,如下所示:

@POST("/myCustomUrlPath")
Call<Transaction> createTransaction(
        @Body TransactionBody transactionBody
        );


TransactionBody具有以下参数:

transactionType-String

transactionReference-String

transactionDate-String

transactionLines-TransactionLines //(my custom model)

一切似乎都很好,直到我测试了请求并看到我的TransactionLines模型的属性没有像这样发送:

"productReference":"testProductReference"

但是相反,它们是通过我的java类路径发送的,如下所示:

"model.transactionLines.productReference":"testProductReference"

这当然会使我的服务器返回错误,因为它期望的是productReference而不是model.transactionLines.productReference。如何在变量名之前删除Java类模型的路径?

编辑:

我认为我的问题与建议的可能已经问到的问题没有任何关系。他们要求在json中发布数组,而在json发布中使用的自定义对象中发布变量名称时遇到问题。

但是,@ Jeel Vankhede是正确的。序列化变量的名称删除了我的java类的路径,现在请求已填充正确的数据。谢谢!

最佳答案

正如Jeel在评论中建议的那样,您应该在模型类中使用@SerializedName批注。这是模型的外观:

@SerializedName("productReference")
private String productReference;


在您的TransactionLines类中。如果未指定此属性,它将仅使用默认名称进行序列化,通常可以使用该名称,但是如果出于某种原因想要其他名称,则可以在其中指定它。例如,当我真的不喜欢将Java变量命名为some_property且API需要像这样调用它时,我将使用它:

@SerializedName("some_property")
private String someProperty;

07-27 17:02