80,349
社区成员
发帖
与我相关
我的任务
分享
if (requestBody instanceof FormBody) {
public class RequestInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
if (request.method().equals("POST")) {
RequestBody requestBody = request.body();
Loger.i(getClass().getName(), request.body().getClass().getName());//这里打印出来是ContentTypeOverridingRequestBody
if (requestBody instanceof FormBody) { //这里判断永远是false
FormBody formBody = (FormBody) requestBody;
LinkedHashMap<String, Object> hashMap = new LinkedHashMap<>();
for (int i = 0; i < formBody.size(); i++) {
hashMap.put(formBody.encodedName(i), formBody.encodedValue(i));
}
builder.post(getRequestBody(hashMap));
}
}
Log.v(getClass().getName(), "request:" + request.toString());
Log.v(getClass().getName(), "request headers:" + request.headers().toString());
return chain.proceed(builder.build());
}
public static RequestBody getRequestBody(HashMap<String,Object> hashMap){
Gson gson = new Gson();
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=UTF-8"),gson.toJson(hashMap));
return requestBody;
}
}
/**
* post请求方式
*/
@FormUrlEncoded //post请求必须要申明该注解
@POST("login") //方法名
Observable<BaseReponse<LoginRequest>> login(@Field("username") String userName, @Field("password") String password);//请求参数
val buffer = Buffer()//声明一个buffer
val requestBody = request.body
requestBody?.writeTo(buffer)//使用requestBody的writeTo函数把内容写到buffer中
val contentType = requestBody?.contentType()
val charset: Charset = contentType?.charset(StandardCharsets.UTF_8) ?: StandardCharsets.UTF_8 //这里主要是获取字符串编码
val requestContent = buffer.readString(charset)//从buffer中获取requestBody里面的内容,返回一个String
Timber.d("request.body--->${requestContent}")