【发布时间】:2019-08-15 15:29:29
【问题描述】:
我最近在我的 Android 项目中将我的 Retrofit 库从版本 1 升级到了 2,突然我整个项目中的各种映射都无法映射。我在不使用空值的地方有空值,我只能推测它来自失败的映射。
我意识到 Retrofit2 正在跳过我的 JSON 响应的内部元素/属性。因此,例如,此处将跳过操作
这是一个实例 - 自从升级改造后我没有接触过这个类,并且 JSON 响应没有改变。
public final class BXActionInfo extends BXBaseObject {
@SerializedName("_id")
private String id;
@JsonAdapter(ActionEntityTypeJsonAdapter.class)
private ActionEntityType entityType;
private List<BXActionReference> references;
private String referenceClientTitle;
...various getters and setters
这是我的 API 响应(应该映射到此类的部分):
_id": "5bcdf558b876ea01003ff581",
"text": "Camp Care Package!",
"subText": "Build your own!",
"position": 0,
"action": {
"_id": "5bcdf558b876ea01003ff582",
"entityType": 22,
"references": [
{
"referenceType": 12,
"product": null,
"variant": null,
"productId": null,
"variantId": null,
"category": null,
"softCategory": null,
"orderId": null,
"url": null,
"promoCode": null,
"searchTerm": null,
"brandId": null,
"occassionId": "5aec8040bb944d0100d14038",
"_id": "5bcdf571d43cea01005a18e2"
}
],
"referenceClientTitle": ""
},
"isExpressOnly": false
再一次,自第 2 版以来,改造地图的方式有什么变化吗?一定有什么,因为我的代码没有改变。
编辑:
这是 BXActionReference:
public final class BXActionReference extends BXBaseObject {
public enum ActionEntityType {
ACTIONTYPELISTENTITIES, /***/
ACTIONTYPEPRODUCT, /***/
ACTIONTYPEVARIANT, /***/
ACTIONTYPEURL, /***/
ACTIONTYPENOREFERENCE, /***/
ACTIONTYPESOFTCATEGORY, /***/
ACTIONTYPEPRODUCTCATEGORY, /***/
ACTIONTYPEORDERCREATED, /***/
ACTIONTYPEORDERSHIPPED, /***/
ACTIONTYPEORDERDELIVERED, /***/
ACTIONTYPEORDERCANCELLED, /***/
ACTIONTYPEEXPRESSORDERDELIVERED, /***/
ACTIONTYPEEXPRESSORDERCONFIRMED, /***/
ACTIONTYPEEXPRESSORDERCOMPLETESHOPPING, /***/
ACTIONTYPEGIFTCARDORDER, /***/
ACTIONTYPEGIFTCARDCANCELLED, /***/
ACTIONTYPEPROMOCODE, /***/
ACTIONTYPESEARCHRESULTS, /***/
ACTIONTYPEIMAGE, /***/
ACTIONTYPESMILEIMAGE, /***/
ACTIONJOINLOGINACCOUNT
}
@SerializedName("_id")
@Expose
protected String id;
protected String url;
protected int referenceType;
protected String orderId;
protected BXVariant variant;
protected BXProduct product;
protected String variantId;
protected String productId;
protected BXRootSoftCategory softCategory;
protected BXRootCategoryChild category;
protected String promoCode;
protected String searchTerm;
protected String brandId;
protected String occassionId;
//setters and getters here...
这是我的改造构建器:
Retrofit restAdapter = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io()))
.client(okHttpClient2.build())
.build();
【问题讨论】:
-
我可以看看你的 BXActionReference 吗?也是您的改造建筑商?
-
我已将两者都添加到我原来的问题中。