Retrofit 2追加@Body请求

时间:2017-02-27 14:28:07

标签: android retrofit retrofit2

我希望使用带有@Body注释的HTTP请求主体拦截我所有的改装调用,并使用新生成的String附加它们。

到目前为止,我设法拦截了主体并生成了字符串,但无法将其添加到请求中。

我使用了这个答案here但是writeTo()方法似乎将我的参数添加为@Field而不是实际的请求体。

1 个答案:

答案 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();
}