【发布时间】:2016-11-17 17:17:42
【问题描述】:
这个OkHttp v3.4.1的错误信息已经讨论过几次了,每次读到都没有关闭响应体:
WARNING: A connection to http://www.example.com/ was leaked. Did you forget to close a response body?
但我的代码是这样的:
private String executeRequest(Request request) throws IOException {
Response response = httpClient.newCall(request).execute();
try (ResponseBody responseBody = response.body()) {
String string = responseBody.string();
logger.debug("Result: {}", string);
return string;
}
}
所以responseBody.close() 总是被调用。 我怎么会出现上述错误?我配置了自定义 JWT 拦截器,但我不明白它是如何导致问题的:
public class JwtInterceptor implements Interceptor {
private String jwt;
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (jwt != null) {
request = request.newBuilder()
.addHeader("Authorization", "Bearer " + jwt)
.build();
}
Response response = chain.proceed(request);
String jwt = response.header("jwt");
if (jwt != null) {
this.jwt = jwt;
}
return chain.proceed(request);
}
}
【问题讨论】:
-
在您的示例中,
responseBody.close()在哪里调用? -
我只能说
response.close()是从未调用过 -
^^^ try-with-resources
-
你能提供一个minimal reproducible example吗? WARNING 记录在哪里?