gpt4 book ai didi

android - Retrofit2 204 No Content 有内容异常

转载 作者:行者123 更新时间:2023-11-29 14:46:34 25 4
gpt4 key购买 nike

我从服务器获得空 json(“{}”)作为代码为 204 的删除响应。

okhttp3.internal.http.HttpEngine 类中,有一个烦人的东西被抛出:

  if ((code == 204 || code == 205) && response.body().contentLength() > 0) {
throw new ProtocolException(
"HTTP " + code + " had non-zero Content-Length: " + response.body().contentLength());
}

如果您尝试在 header 中返回没有内容(服务器端)的内容,Content-Length 仍然大于 0;

任何非服务器端的想法如何解决这个问题?

最佳答案

您可以在拦截器中捕获 ProtocolException 并返回占位符 204 Response。使用这种方法的注意事项 - 1) 您可能最终会陷入其他协议(protocol)错误(重定向过多等)。如果这是一个问题,您可以将 e.getMessage() 与 okhttp 的异常消息进行比较,如果不匹配则重新抛出异常。 2) 您仍然无法访问原始响应,因此如果您不走运需要检查任何返回的 header 。

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addNetworkInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Response response;
try {
response = chain.proceed(chain.request());
} catch (ProtocolException e) {
response = new Response.Builder()
.request(chain.request())
.code(204)
.protocol(Protocol.HTTP_1_1)
.build();
}
return response;
}
});

关于android - Retrofit2 204 No Content 有内容异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35133292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com