我必须使用以下模型发送数据:
{
"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类的路径,现在请求中填充了正确的数据。谢谢!
答案 0 :(得分:1)
正如Jeel在评论中建议的那样,您应该在模型类中使用@SerializedName
批注。这是模型的外观:
@SerializedName("productReference")
private String productReference;
在您的TransactionLines
类中。如果未指定此属性,它将仅使用默认名称进行序列化,通常可以使用该名称,但是如果出于某些原因想要其他名称,则可以在其中指定它。例如,当我真的不喜欢将Java变量命名为some_property
,并且API需要像这样调用它时,我会用到它,例如:
@SerializedName("some_property")
private String someProperty;