我必须以以下模型发送数据:
{
"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;