改造/ Android - 动态响应支持

时间:2018-02-05 09:28:14

标签: java android json retrofit firebase-cloud-messaging

我在使用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字段,稍后我可以解析它以检索主题列表吗?或者还有其他的洗液吗?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果使用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;
}

对于moshi:

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;
}