有时我们会得到此异常处理响应。
似乎Response具有null
主体。
代码类似于:
try (Response response = client.newCall(request).execute()) {
// do stuff with the response
} catch (Exception e) {
log.error("Something wrong", e);
}
在执行close()
块之后,在响应上自动调用的do stuff with response
方法上引发了异常。
堆栈跟踪:
java.lang.IllegalStateException: response is not eligible for a body and must not be closed
at okhttp3.Response.close(Response.java:281)
我们错过了什么吗?
谢谢。
答案 0 :(得分:0)
由于“尝试使用资源”可与“自动关闭”一起使用(即,类实现了“可关闭”接口,因此它将尝试在块之后自动调用关闭。
现在,Response close()方法的规范确实指定了该方法在某些情况下会抛出异常。
关闭不符合正文要求的回复是错误的。 其中包括从{@link #cacheResponse}返回的响应, {@link #networkResponse}和{@link PriorResponse()}。
来源: https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/Response.java
所以,这是“期望的”,您可以仅记录详细信息,如果期望的话,可以继续。或正确处理(例如:重试)(如果不期望)。
答案 1 :(得分:0)
我认为您可以调用与data want;
set have;
array infusion {*} date_of_infusion:;
array labdate {*} labdate:;
array flag {101} flag0-flag100;
do i= 1 to dim(labdate);
do j=1 to dim(infusion);
if infusion[j] ne . and infusion[j]<=labdate[i]<=intnx('month',infusion[j],4) then flag[i]=1;else flag[i]=0;
if flag[i] then leave;
end;
end;
run;
相同的response.body.close()
,并在关闭前检查body是否为空。
response.close()