Retrofit2如何在Post、Get、Header上設置固定參數 | 公共參數


原理是使用OkHttp3里面的Interceptor攔截請求。

實例代碼如下:
第一步,創建一個OkHttp3攔截器:

public class MyInterceptor implements Interceptor {


    @NotNull
    @Override
    public Response intercept(@NotNull Chain chain) throws IOException {
        Request request = chain.request();
        Request.Builder newRequestBuilder = request.newBuilder();

        //為Header設置公共參數
        newRequestBuilder.addHeader("token", "123456");

        //為Url設置公共參數
        HttpUrl url = request.url().newBuilder().addQueryParameter("token", "123456").build();
        newRequestBuilder.url(url);

        RequestBody body = request.body();
        //為Post表單請求設置公共參數
        if (body instanceof FormBody) {
            FormBody formBody = (FormBody) body;
            FormBody.Builder formBodyBuilder = new FormBody.Builder();
            for (int i = 0; i < formBody.size(); i++) {
                formBodyBuilder.addEncoded(formBody.encodedName(i), formBody.encodedValue(i));
            }
            //公共參數設置處
            formBodyBuilder.add("token", "123456");
            newRequestBuilder.post(formBodyBuilder.build());
        } else if (body instanceof MultipartBody) {
            MultipartBody multipartBody = (MultipartBody) body;
            MultipartBody.Builder newMultipartBodyBuilder = new MultipartBody.Builder();
            //公共參數設置處
            newMultipartBodyBuilder.addPart(Headers.of("Content-Disposition: form-data; name=\"token\""), RequestBody.create("123456", null));
            //或者
            newMultipartBodyBuilder.addFormDataPart("token", "123456");
            for (int i = 0; i < multipartBody.size(); i++) {
                MultipartBody.Part part = multipartBody.part(i);
                newMultipartBodyBuilder.addPart(part);
            }
            newRequestBuilder.post(multipartBody);
        }
        return chain.proceed(newRequestBuilder.build());
    }
}


第二步,創建OkHttpClient實例並設置攔截器:

retrofit = new Retrofit.Builder()
        .client(new OkHttpClient.Builder().addInterceptor(new MyInterceptor()).build())
        .baseUrl("http://apis.juhe.cn/").build();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM