我希望使用带有@Body注释的HTTP请求主体拦截我所有的改装调用,并使用新生成的String附加它们。
到目前为止,我设法拦截了主体并生成了字符串,但无法将其添加到请求中。
我使用了这个答案here但是writeTo()方法似乎将我的参数添加为@Field而不是实际的请求体。
答案 0 :(得分:3)
我在旧请求者中添加“token”:“value”
public static Request interceptRequest(Request request)
throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Sink sink = Okio.sink(baos);
BufferedSink bufferedSink = Okio.buffer(sink);
/**
* Write old params
* */
request.body().writeTo(bufferedSink);
if (UserModelManager.getInstance().isLogin()) {
String hasd = bufferedSink.buffer().readString(Charset.defaultCharset());//result like this [text={}]
Pattern pattern = Pattern.compile("\\{.*\\}");
Matcher matcher = pattern.matcher(hasd);
if(matcher.find()){
String oldBody = matcher.group();
try {
JSONObject jsonObject = new JSONObject(oldBody);
jsonObject.put("token", UserModelManager.getInstance().getUser().token);
bufferedSink.flush();
bufferedSink.writeString(jsonObject.toString(), Charset.defaultCharset());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
/**
* write to buffer additional params
* */
RequestBody newRequestBody = RequestBody.create(
request.body().contentType(),
bufferedSink.buffer().readUtf8()
);
return request.newBuilder().post(newRequestBody).build();
}