retrofit2自定converter要點

接口定義中要寫明轉換類型 TYNetworkingRespondModel
public class TYNetworkingRespondModel {
    private String Msg;
    private int Code;
    private Map Data;
}
@GET("app/MobileApp.ashx")
    Call<TYNetworkingRespondModel> createGetRequest(@Query("Module") String module,@Query("Param") String param);
自定義Factory中處理轉換
public class MyConverterFactory extends Converter.Factory {
    public static MyConverterFactory create() {
        return create(new Gson());
    }

    private final Gson gson;

    public static MyConverterFactory create(Gson gson) {
        return new MyConverterFactory(gson);
    }

    private MyConverterFactory(Gson gson) {
        if (gson == null) throw new NullPointerException("gson == null");
        this.gson = gson;
    }

//    @javax.annotation.Nullalbe
    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        //判斷響應實體類型是否是我們需要特殊處理的特殊類型(此處以String類型)
        if (type == TYNetworkingRespondModel.class) {
            //創(chuàng)建xxConverter來 進行特殊轉換
            return new MyResponseConverter<TYNetworkingRespondModel>(gson);
        } else {
            //其它類型我們不處理,返回null就行 會交給后面的解析器來解析
            return null;
        }
    }

    private class MyResponseConverter<T> implements Converter<ResponseBody, T> {
        private final Gson gson;

        MyResponseConverter(Gson gson) {
            this.gson = gson;
        }

        @Override
        public T convert(ResponseBody value) throws IOException {
            //在此處進行我們的轉換
            String response = value.string();
            TYNetworkingRespondModel movieDataBean = gson.fromJson(response, TYNetworkingRespondModel.class);
//            return (T) response;
            return (T) movieDataBean;
        }

    }
}
具體使用
Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(TYStaticDefine.STR_BASE_URL)
                    .addConverterFactory(MyConverterFactory.create())
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
更復雜的轉化可以通過自定義JsonDeserializer實現

詳情見:http://www.javacreed.com/gson-deserialiser-example/

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 記得十年前的一句話,她說:待兒子大學畢業(yè)了,我一定會好好享受生活的。而現在的她真的在享受嗎,否……?;叵肫饋砦业难?..
    鈍角閱讀 822評論 1 48
  • 文/韓大爺的雜貨鋪 1. 青春期的時候特別煩我爸,神煩。 刨除其他的原因,最受不了的就是他話多,巨多。 又厚又大的...
    韓大爺的雜貨鋪閱讀 2,018評論 22 65
  • 父母就是拖起孩子的人,你的高度決定了孩子的起點,如果你有大海的胸懷,那他一定能聽到大海的澎湃,如果你站在高山之巔,...
    尚德教育閱讀 186評論 0 0
  • 咩咩_sjs閱讀 154評論 0 0
  • 飄零書劍蕩江南,清酒金樽醉共眠。 千里月華映陶舍,三春花氣滿東山。 詩成能泣梧桐雨,筆落深驚漢皇船。 飛鳥翩翩行不...
    賈大官人閱讀 521評論 2 12

友情鏈接更多精彩內容