【问题标题】:How to change response body in intercept (Using retrofit 2)如何在拦截中更改响应主体(使用改造 2)
【发布时间】:2018-10-23 03:42:45
【问题描述】:

我阅读了数以千计的答案并尝试了很多方法但没有奏效。 收到“401”时,我真的需要更改响应正文。因为服务器响应与其他未经授权时的一般响应不同。

我正在使用改造 2。为了捕捉响应,我正在使用拦截器:

                Request original = chain.request();
                Request.Builder requestBuilder = original.newBuilder()
                        .header("authorization", getAccessToken(context));
                Request request = requestBuilder.build();
                Response response= chain.proceed(request);
                if (response.code()==401) {
                    MediaType contentType = response.body().contentType();
                    ResponseBody body = ResponseBody.create(contentType, CommonFunctions.getUnAuthorizedJson(context).toString());
                    return response.newBuilder().body(body).build();
                }else{
                    return response;
                }

但在 client.enque 方法上仍然没有改变 body。

【问题讨论】:

    标签: java android retrofit2 okhttp3


    【解决方案1】:

    您可以通过这种方式更改正文,但 Retrofit 最终会看到 401 并抛出带有标准消息的 HttpException,这可能会产生误导

    检查你的身体是否正确:

    
    val errorConverter: Converter<ResponseBody, ErrorResponse> =
            retrofit.responseBodyConverter(
                ErrorResponse::class.java,
                emptyArray()
            )
    
    val errorResponse = httpException
                .response()
                ?.errorBody()
                ?.let (errorConverter::convert)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多