74. [Springboot]okHttp错误:Exception in thread “OkHttp Dispatcher” java.lang.IllegalStateException: closed

在做一个接口任务时,使用okHttp时报了以下这样的错误:

2021-10-13 05:33:02.167  INFO 1 --- [xxx.com/...] c.s.d.webhook.controller.CoreController  : {"code":"000000","description":"Success","data":"success"}
2021-10-13 05:33:02.167  INFO 1 --- [xxx.com/...] c.s.d.webhook.controller.CoreController  : 
Exception in thread "OkHttp Dispatcher" java.lang.IllegalStateException: closed
	at okhttp3.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:418)
	at okio.Buffer.writeAll(Buffer.java:993)
	at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:106)
	at okhttp3.ResponseBody.bytes(ResponseBody.java:128)
	at okhttp3.ResponseBody.string(ResponseBody.java:154)
	at com.svw.data.webhook.controller.CoreController$1.onResponse(CoreController.java:104)
	at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
	at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

可以看到接口请求已经成功了,可是还是报了以上的错误。

搜索发现这个错误居然是由于response.body().string()调用了多次导致的,string()仅可调用一次。

在代码中将该调用修改为仅一次调用即可,此错误就消失了。