简体   繁体   English

有没有办法设置一个基本请求参数,以包含在使用Square的Retrofit库进行的每个请求中?

[英]Is there a way to set a base request parameter to be included in every request made with Square's Retrofit library?

I'm using Square's Retrofit library for short-lived network calls. 我正在使用Square的Retrofit库进行短期网络呼叫。 There are a few pieces of data that I include as @Query params on every request. 我在每个请求中都包含了一些@Query参数的数据。 Like so: 像这样:

@GET("/thingOne.php")
void thingOne(
        @Query("app_version") String appVersion,
        @Query("device_type") String deviceType,
        Callback<Map<String,Object>> callback
);

@GET("/thingTwo.php")
void thingTwo(
        @Query("app_version") String appVersion,
        @Query("device_type") String deviceType,
        Callback<Map<String,Object>> callback
);

It's cumbersome to have to define appVersion and deviceType for every single endpoint outlined in the Interface . Interface概述的每个端点定义appVersiondeviceType非常麻烦。 Is there a way to set a base set of parameters that should be included with every request? 有没有办法设置每个请求应包含的基本参数集? Something similar to how we set a common Authorization Header ? 类似于我们如何设置通用Authorization Header

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer("...")
    .setRequestHeaders(new RequestHeaders() {
        @Override
        public List<Header> get() {
            List<Header> headers = new ArrayList<Header>();
                Header authHeader = new Header(
                    "Authorization", "Bearer " + token);
                headers.add(authHeader);
            }
            return headers;
        }
    })
    .build();
this.service = restAdapter.create(ClientInterface.class);

You can ensure all requests have these query parameters by adding a custom RequestInterceptor to your RestAdapter 通过向RestAdapter添加自定义RequestInterceptor,可以确保所有请求都具有这些查询参数

RequestInterceptor requestInterceptor = new RequestInterceptor()
{
    @Override
    public void intercept(RequestFacade request) {
        request.addQueryParam("app_version", "Version 1.x");
        request.addQueryParam("device_type", "Samsung S4");
    }
};

restAdapter.setRequestInterceptor(requestInterceptor)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM