将不同的数据传递给改造模型中的相同名称 json 属性

Passing different data to same name json attribute in retrofit model

有一个 WebService,我想从中获取 @GET 和 @POST 数据,但它的所有响应都像这个主题:

 {
  "data": {
    ...
  },
  "success": ... ,
  "message": ...
}

但是 data 有不同的输出主题,像这样:

{
  "data": {
    "update_status": "critical",
    "last_version_name": "1.0.3",
    "last_version_code": "3",
    "need_to_upgrade": false
  },
  "success": true,
  "message": "DONE!"
}

&

{
  "data": {
    "year": "2020",
    "month": "09",
    "day": "09",
    "hour": "06",
    "second": "00",
    "unix": "1599631246"
  },
  "success": true,
  "message": null
}

我如何定义模型以通过 Retrofit 和 GSON 转换器使用它? 我应该在某处使用@SerializedName吗?

(即:)

public class Response{
    private boolean success;
    private String message;
    
    //private Data data
}

创建一个基本合同并根据所有响应 classes 扩展它。在合同 data 部分将是通用的。

public class BaseResponse<T> {
public boolean success;
public String message;
public T data;
 }

现在您必须为每种类型的响应创建数据class。

public class MyResponse{
public String update_status;
public String last_version_name;
public String last_version_code;
public boolean need_to_upgrade;
}

现在您可以使用 BaseResponse<MyResponse> 作为 return 类型的改造调用。您可以对数组响应执行相同的操作,即创建一个 BaseListResponse class.