如何处理可能不同的响应Retrofit 2中的类型 [英] How to handle response which can be different Type in Retrofit 2

查看:104
本文介绍了如何处理可能不同的响应Retrofit 2中的类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在WebApi中,返回的JSON字段可以是不同的类:

In WebApi returned JSON's field can be of different class:

{ someField:"some string" }
{ someField: { "en" : "some string", "ka" : "რამე სტრინგი" } }

我已经看到了一些解决方案,但这是在Retrofit的早期版本中使用的.

I've seen some solutions, but it was on previous versions of Retrofit.

我的pojo类的外观如何,我可以用来解析此动态json?

How would my pojo class look like and what can i use to parse this dynamic json?

推荐答案

对于您的情况,可以使用Call<JsonElement>作为响应类型并在响应中进行解析:

For your case you can use Call<JsonElement> as response type and parse it in response:

call.enqueue(new Callback<JsonElement>() {
        @Override
        public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
            if(response.isSuccessful()){
                JsonElement jsonElement = response.body();
                if(jsonElement.isJsonObject()){
                    JsonObject objectWhichYouNeed = jsonElement.getAsJsonObject();
                } 
                // or you can use jsonElement.getAsJsonArray() method
                //use any json deserializer to convert to your class.
            }
            else{
                System.out.println(response.message());
            }
        }
        @Override
        public void onFailure(Call<JsonElement> call, Throwable t) {
            System.out.println("Failed");
        }
    });

这篇关于如何处理可能不同的响应Retrofit 2中的类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆