How to handle response which can be different Type in Retrofit 2

陌路散爱 提交于 2019-12-21 05:49:05

问题


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

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

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

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


回答1:


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


来源:https://stackoverflow.com/questions/39287515/how-to-handle-response-which-can-be-different-type-in-retrofit-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!