美文网首页
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