猿问

Retrofit 2 在请求数据中命名变量时添加java类名

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


{

"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具有以下参数:


交易类型 - String


交易参考 - String


交易日期 - String


交易线 - TransactionLines //(my custom model)


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


"productReference":"testProductReference"


但相反,它们与我的 java 类路径一起发送,如下所示:


"model.transactionLines.productReference":"testProductReference"


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


编辑:


我不认为我的问题与建议的可能已经提出的问题相近。他们要求在 json 中发布一个数组,而我在发布 json post 中使用的自定义对象中的变量名称时遇到了问题。


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


一只萌萌小番薯
浏览 123回答 1
1回答

猛跑小猪

正如 Jeel 在评论中建议的那样,您应该@SerializedName在模型类中使用注释。这是您的模型的外观:@SerializedName("productReference")private String productReference;在你的TransactionLines课上。当未指定此属性时,它只会使用序列化的默认名称,这通常是可行的,但如果出于某种原因您想要不同的名称,则可以在此处指定它。例如,当我真的不喜欢将我的 Java 变量命名为some_property,而 API 需要像这样调用它时,我会使用它,我将执行以下操作:@SerializedName("some_property")private String someProperty;
随时随地看视频慕课网APP

相关分类

Java
我要回答