繁体   English   中英

Retrofit/Android - 动态响应支持

[英]Retrofit/Android - dynamic response support

我在使用 Retrofit 将生成的 json 数据映射到 pojo 类时遇到问题。 我需要通过令牌确定 Firebase 主题。 这可以通过 Google 的 json api 轻松完成,如下所述: https : //developers.google.com/instance-id/reference/server#get_information_about_app_instances

就我而言,服务器响应类似于:

{
    "applicationVersion": "36",
    "connectDate": "2018-02-04",
    "attestStatus": "ROOTED",
    "application": "<my application id>",
    "scope": "*",
    "authorizedEntity": "205414012839",
    "rel": {
        "topics": {
            "topic1": {
                "addDate": "2018-02-04" 
            },
            "topic2": {
                "addDate": "2018-01-31" 
            }
        }
    },
    "connectionType": "WIFI",
    "appSigner": "<hash>",
    "platform": "ANDROID" 
}

问题基本上是reltopics结构,因为topics是动态的,字段列表可以是任何东西,而且是未知的。 所以我不能生成简单的 POJO 来让它自动被 Retrfofit 映射。

我可以强制 Retrofit 将topics视为单个String字段,稍后我可以解析它以检索主题列表吗? 或者有没有其他解决办法?

有任何想法吗?

如果使用 gson,则可以将 rel 定义为 JsonElement。 如果使用 moshi,则可以将其定义为 Map。 对于 gson:

public class Response{
    private String applicationVersion;
    private String connectDate;
    private String attestStatus;
    private String application;
    private String scope;
    private String authorizedEntity;
    private String connectionType;
    private String appSigner;
    private String platform;
    private JsonElement rel;
}

对于莫希:

public class Response{
    private String applicationVersion;
    private String connectDate;
    private String attestStatus;
    private String application;
    private String scope;
    private String authorizedEntity;
    private String connectionType;
    private String appSigner;
    private String platform;
    private Map<String, Map<String, Map<String, String>>> rel;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM