欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決okhttp3提示java.lang.IllegalStateException:closed異常問題

 更新時間:2025年07月16日 08:42:46   作者:一縷純氧  
使用OkHttp3時,response.body().string()只能調(diào)用一次,重復調(diào)用會導致流關閉異常,解決方法是保存響應體內(nèi)容到變量或重新構建Response對象,避免多次讀取

okhttp3提示java.lang.IllegalStateException:closed異常

使用okhttp3的response.body().string()時候提示java.lang.IllegalStateException: closed異常

原因為okhttp3請求回調(diào)中response.body().string()只能有效調(diào)用一次,而我使用了兩次,所以在第二次時調(diào)用時提示已關閉流的異常。

		Response response = httpClient.newCall(request).execute();
        logger.info(response.body().string()); //一次
        Map<String,Object> resMap=objectMapper.readValue(response.body().string(),Map.class); //兩次

解決辦法

將返回的值保存在對象中,重復使用對象即可。(或者重新builder一個Response對象)

    public void pushOrder(RecordPushRequest pushRequest) throws Exception {
        //TODO:構造builder
        Request.Builder builder = new Request.Builder()
                .url(URL)
                .header("Content_Type", "application/json");
        //TODO:構造請求體
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),
                objectMapper.writeValueAsString(pushRequest));
        //TODO:構造請求
        Request request = builder.post(requestBody).build();
        //TODO:發(fā)起請求
        Response response = httpClient.newCall(request).execute();
        String res = response.body().string();
//        logger.info(response.body().string()); //打印時重復使用了一次
        Map<String,Object> resMap=objectMapper.readValue(res,Map.class);
        logger.info("得到的響應解析結(jié)果:{} ",resMap);
    }

深扒response.body().string()問題原因

查看源碼Response.class:

private final ResponseBody body;

發(fā)現(xiàn)body是一個ResponseBody 對象。繼續(xù)查看ResponseBody 類的源碼:

public abstract class ResponseBody implements Closeable 

ResponseBody類實現(xiàn)Closeable接口,感覺有點找到問題的源泉了,繼續(xù)點進去看看Closeable接口是干嘛的:

public interface Closeable extends AutoCloseable {

    /**
     * Closes this stream and releases any system resources associated
     * with it. If the stream is already closed then invoking this
     * method has no effect.
     *
     * <p> As noted in {@link AutoCloseable#close()}, cases where the
     * close may fail require careful attention. It is strongly advised
     * to relinquish the underlying resources and to internally
     * <em>mark</em> the {@code Closeable} as closed, prior to throwing
     * the {@code IOException}.
     *
     * @throws IOException if an I/O error occurs
     */
    public void close() throws IOException;
}

Closeable接口繼承AutoCloseable類,有一個close方法,官方標注:“關閉此流并釋放與之關聯(lián)的任何系統(tǒng)資源。

如果流已關閉,則調(diào)用此方法無效。”大概就是這個原因了。所以不要多次調(diào)用response.body().string();語句。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 關于IDEA關聯(lián)數(shù)據(jù)庫的問題

    關于IDEA關聯(lián)數(shù)據(jù)庫的問題

    這篇文章主要介紹了IDEA關聯(lián)數(shù)據(jù)庫的相關知識,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • java8 BigDecimal類型的List求和方式

    java8 BigDecimal類型的List求和方式

    這篇文章主要介紹了java8 BigDecimal類型的List求和方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-11-11
  • Hibernate悲觀鎖和樂觀鎖實例詳解

    Hibernate悲觀鎖和樂觀鎖實例詳解

    這篇文章主要介紹了Hibernate悲觀鎖和樂觀鎖實例詳解,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java中文轉(zhuǎn)全拼工具類分享

    java中文轉(zhuǎn)全拼工具類分享

    這篇文章主要介紹了一個JAVA將漢字轉(zhuǎn)換為全拼的工具類,大參考使用吧
    2014-01-01
  • java.lang.OutOfMemoryError 錯誤整理及解決辦法

    java.lang.OutOfMemoryError 錯誤整理及解決辦法

    這篇文章主要介紹了java.lang.OutOfMemoryError 錯誤整理及解決辦法的相關資料,需要的朋友可以參考下
    2016-10-10
  • SpringBoot中API接口參數(shù)獲取方式小結(jié)

    SpringBoot中API接口參數(shù)獲取方式小結(jié)

    在Spring Boot中,API接口參數(shù)可以通過多種方式獲取,具體取決于你定義的API接口參數(shù)類型(如路徑參數(shù)、查詢參數(shù)、請求體參數(shù)、請求頭等),本文給大家就介紹了一些常見的參數(shù)獲取方式,需要的朋友可以參考下
    2024-06-06
  • MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例

    MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例

    由于需要處理短時間內(nèi)大量數(shù)據(jù)入庫的問題,想到了Mybatis的批量操作,本文主要介紹了MyBatis批量查詢、插入、更新、刪除的實現(xiàn)示例,感興趣的可以了解一下
    2023-05-05
  • 詳解Java中自定義注解的使用

    詳解Java中自定義注解的使用

    Annontation是Java5開始引入的新特征,中文名稱叫注解,它提供了一種安全的類似注釋的機制,用來將任何的信息或元數(shù)據(jù)(metadata)與程序元素(類、方法、成員變量等)進行關聯(lián)。本文主要介紹了自定義注解的使用,希望對大家有所幫助
    2023-03-03
  • 解決Mybatis查詢方法selectById()主鍵不一致問題

    解決Mybatis查詢方法selectById()主鍵不一致問題

    這篇文章主要介紹了解決Mybatis查詢方法selectById()主鍵不一致問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringMVC異常處理的三種方式小結(jié)

    SpringMVC異常處理的三種方式小結(jié)

    本文主要介紹了SpringMVC異常處理的三種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09

最新評論