IllegalStateException:响应不符合正文的资格,并且不得关闭

时间:2018-08-01 06:55:22

标签: okhttp3

有时我们会得到此异常处理响应。 似乎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)

我们错过了什么吗?
谢谢。

2 个答案:

答案 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()