最近刚开始接触Retrofit,碰到一个问题:
服务器要求所有POST方式接口都带上TOKEN等字段,如果每个接口都单独写明显不符合程序员的气质,那么问题来了:Retrofit里如何在请求的时候统一给请求加上这些公共的参数?
我猜想应该是在拦截器里,但试了一下,POST方式不知道怎么加,求大神指导。
Android Retrofit POST请求加公共参数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- naivor 2016-07-10 11:11关注
自己定义一个interceptor,在里面处理,比如
public class ParamsInterceptor implements Interceptor { private static final String TAG = "request params"; private Context context; @Inject public ParamsInterceptor(Context context) { this.context = context; } @Override public Response intercept(Chain chain) throws IOException { Request orgRequest = chain.request(); RequestBody body = orgRequest.body(); //收集请求参数,方便调试 StringBuilder paramsBuilder = new StringBuilder(); if (body != null) { RequestBody newBody = null; if (body instanceof FormBody) { newBody = addParamsToFormBody((FormBody) body, paramsBuilder); } else if (body instanceof MultipartBody) { newBody = addParamsToMultipartBody((MultipartBody) body, paramsBuilder); } if (null != newBody) { //打印参数 LogUtil.i(TAG, paramsBuilder.toString()); Request newRequest = orgRequest.newBuilder() .url(orgRequest.url()) .method(orgRequest.method(), newBody) .build(); return chain.proceed(newRequest); } } return chain.proceed(orgRequest); } /** * 为MultipartBody类型请求体添加参数 * * @param body * @param paramsBuilder * @return */ private MultipartBody addParamsToMultipartBody(MultipartBody body, StringBuilder paramsBuilder) { MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); //添加appcode String appcode = context.getString(R .string.appkey); builder.addFormDataPart("appcode", appcode); paramsBuilder.append("appcode=" + appcode); //添加id,city参数 User user = BaseRepository.getUser(); if (user != null) { String id = user.id() + ""; UserType userType = user.userType(); if (userType == UserType.BEAUTICIAN) { builder.addFormDataPart("beautician_id", id); paramsBuilder.append("&"); paramsBuilder.append("beautician_id=" + id); } else if (userType == UserType.BEAUTYSHOP){ builder.addFormDataPart("bp_id", id); paramsBuilder.append("&"); paramsBuilder.append("bp_id=" + id); } //城市 String city = user.city(); builder.addFormDataPart("city", city); paramsBuilder.append("&"); paramsBuilder.append("city=" + city); } //添加原请求体 for (int i = 0; i < body.size(); i++) { builder.addPart(body.part(i)); } return builder.build(); } /** * 为FormBody类型请求体添加参数 * * @param body * @param paramsBuilder * @return */ private FormBody addParamsToFormBody(FormBody body, StringBuilder paramsBuilder) { FormBody.Builder builder = new FormBody.Builder(); //添加appcode String appcode = context.getString(R .string.appkey); builder.add("appcode", appcode); paramsBuilder.append("appcode=" + appcode); //添加id,city参数 User user = BaseRepository.getUser(); if (user != null) { String id = user.id() + ""; UserType userType = user.userType(); if (userType == UserType.BEAUTICIAN) { builder.add("beautician_id", id); paramsBuilder.append("&"); paramsBuilder.append("beautician_id=" + id); } else if (userType == UserType.BEAUTYSHOP){ builder.add("bp_id", id); paramsBuilder.append("&"); paramsBuilder.append("bp_id=" + id); } //城市 String city = user.city(); builder.add("city", city); paramsBuilder.append("&"); paramsBuilder.append("city=" + city); } //添加原请求体 for (int i = 0; i < body.size(); i++) { builder.addEncoded(body.encodedName(i), body.encodedValue(i)); paramsBuilder.append("&"); paramsBuilder.append(body.name(i)); paramsBuilder.append("="); paramsBuilder.append(body.value(i)); } return builder.build(); } }
解决评论 打赏 举报无用 1