- java.lang.IllegalStateException: closed 해결 방법
java.lang.IllegalStateException: closed at okio.RealBufferedSource.select(RealBufferedSource.kt:218) at okhttp3.internal.Util.readBomAsCharset(Util.kt:265) at okhttp3.ResponseBody.string(ResponseBody.kt:187) at G2B.g2b.service.BidService.testAPI(BidService.java:716) at G2B.g2b.controller.MainController.index(MainController.java:20) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568)
java.lang.IllegalStateException: closed 에러는 ResponseBody.string()을 여러 번 호출했을 때 발생하는 대표적인 오류이다. ResponseBody.string() 메서드는 한 번 호출하면 스트림이 닫히기 때문에 다시 호출할 수 없다.
- 해결 방법 : string() 값을 변수에 저장 후 사용
ResponseBody.string()을 여러 번 호출할 필요가 있다면, 처음 호출 시 변수에 저장하고 이후 그 변수를 사용한다.
ResponseBody responseBody = response.body();
// log.info(responseBody.string()) <- 이 부분이 문제였다.
String body = responseBody.string();