美文网首页
retrofit实践

retrofit实践

作者: crossroads | 来源:发表于2021-02-25 18:53 被阅读0次

    前言

    如果后端有时返回{value:""},有时返回{value:[]},retrofit和Gson该怎么配合,去兼容呢?这里我们就以这种情况举例,它对应的model是这样的

    class TestRepo{ 
    private String choice; // 对应{value:""}
    private List<String> choices; //对应 {value:[]}
    ...
    }
    

    1. retrofit设置

    Retrofit.Builder()
        
    ...
    .addConverterFactory(GsonConverterFactory.create(gsonBuilder.create()))
    ...
    

    2. gsonBuilder设置

     gsonBuilder.registerTypeAdapter(TestRepo.class,new TestRepoTypeAdapter())
    

    TestRepo是Json解析的model名,TestRepoTypeAdapter是继承JsonDeserializer || JsonSerializer的对象。

    3. XXTypeAdapter的实现

    这里我们即继承JsonSerializer用于上传给后端的时候更改json串,也继承JsonDeserializer用于后端数据返回的时候将数据准确解析为我们的model。

    public class TestTypeAdapter implements JsonDeserializer<TestRepo>, JsonSerializer<TestRepo> {
    
        private Gson gson = new GsonBuilder().create();
    
        @Override
        public TestRepo deserialize(
            JsonElement json, Type typeOfT, JsonDeserializationContext context
        ) throws JsonParseException {
            TestRepo t = gson.fromJson(json, TestRepo.class);
            JsonObject jsonObject = json.getAsJsonObject();
            //todo 根据不同情况进行解析
          //  t.setChoice();
          //  t.setChoices();
            return t;
        }
    
        @Override
        public JsonElement serialize(
            TestRepo src, Type typeOfSrc, JsonSerializationContext context
        ) {
            JsonObject jsonObject = gson.fromJson(gson.toJson(src), JsonObject.class);
            //todo 根据不同情况更改传给后端的json串
            return jsonObject;
        }
    }
    

    相关文章

      网友评论

          本文标题:retrofit实践

          本文链接:https://www.haomeiwen.com/subject/dzdbwhtx.html