java - 如何更改拦截中的响应主体(使用改造2)

标签 java android retrofit2 okhttp

我阅读了数千个答案并尝试了很多方法但不起作用。 当收到“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,但是Retrofit最终会看到401并抛出带有标准消息的HttpException,这可能会产生误导

检查你的 body 是否正确:


val errorConverter: Converter<ResponseBody, ErrorResponse> =
        retrofit.responseBodyConverter(
            ErrorResponse::class.java,
            emptyArray()
        )

val errorResponse = httpException
            .response()
            ?.errorBody()
            ?.let (errorConverter::convert)

关于java - 如何更改拦截中的响应主体(使用改造2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314070/

相关文章:

android - 隐藏 View 仅在用户下拉时显示

android - Dagger 不为 androidTest 生成组件类

java - 改造请求正文 : Required fields

android - Retrofit2 ,Rxjava 中的过滤列表响应

java - 如何使用 Java 8 简化链式 if 条件

java - jackson :bean 类有多个具有相同名称和不同类型参数的 setter 的问题

java - 编辑字符串中的 Unicode

java - 如何从 persistence.xml 引用外部 hibernate.cfg.xml

java - HttpURLConnection 和没有互联网

android - 如何在retrofit2 android中发送表单数据