为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2021-12-01 16:27:24
我必须以以下模型发送数据:{"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 类的路径,现在请求填充了正确的数据。谢谢!
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

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


@SerializedName("productReference")

private String productReference;

在你的TransactionLines课上。当未指定此属性时,它只会使用序列化的默认名称,这通常是可行的,但如果出于某种原因您想要不同的名称,则可以在此处指定它。例如,当我真的不喜欢将我的 Java 变量命名为some_property,而 API 需要像这样调用它时,我会使用它,我将执行以下操作:


@SerializedName("some_property")

private String someProperty;


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信