91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RestTemplate如何設置超時時間及返回狀態碼

發布時間:2022-06-08 10:29:07 來源:億速云 閱讀:4898 作者:iii 欄目:開發技術

今天小編給大家分享一下RestTemplate如何設置超時時間及返回狀態碼的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

默認情況下使用RestTemplate如果返回結果的狀態碼是200的話就正常處理,否則都會拋出異常;

1.調試postForEntity請求

調試postForEntity請求的方法找到判斷響應結果狀態碼的方法是org.springframework.web.client.DefaultResponseErrorHandler類中的hasError方法

	@Override
	public boolean hasError(ClientHttpResponse response) throws IOException {
		int rawStatusCode = response.getRawStatusCode();
		HttpStatus statusCode = HttpStatus.resolve(rawStatusCode);
		return (statusCode != null ? hasError(statusCode) : hasError(rawStatusCode));
	}

代碼再往上跟蹤一級,如下:

	protected void handleResponse(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
		ResponseErrorHandler errorHandler = getErrorHandler();
		boolean hasError = errorHandler.hasError(response);
		if (logger.isDebugEnabled()) {
			try {
				int code = response.getRawStatusCode();
				HttpStatus status = HttpStatus.resolve(code);
				logger.debug("Response " + (status != null ? status : code));
			}
			catch (IOException ex) {
				// ignore
			}
		}
		if (hasError) {
			errorHandler.handleError(url, method, response);
		}
	}

從上面的代碼可以看到是使用了RestTemplate的錯誤處理器,所以我們就可以想辦法自定義錯誤處理器;

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        RestTemplate restTemplate = new RestTemplate(factory);
        ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {
            @Override
            public boolean hasError(ClientHttpResponse response) throws IOException {
                return true;
            }
            @Override
            public void handleError(ClientHttpResponse response) throws IOException {
            }
        };
        restTemplate.setErrorHandler(responseErrorHandler);
        return restTemplate;
    }zhi

只需要將hasError方法的返回值更改為true就可以了,以后不管狀態碼是200還是其它的都會返回結果;

2.設置超時時間

RestTemplate默認使用的是SimpleClientHttpRequestFactory工廠方法,看下它的超時時間是:

	private int connectTimeout = -1;

	private int readTimeout = -1;

默認值都是-1,也就是沒有超時時間;

其底層是使用URLConnection,而URLConnection實際上時封裝了Socket,Socket我們知道是沒有超時時間限制的,所以我們必須設置超時時間,否則如果請求的URL一直卡死程序將會不可以運行下去;

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        //讀取超時5秒,默認無限限制,單位:毫秒
        factory.setReadTimeout(5000);
        //連接超時10秒,默認無限制,單位:毫秒
        factory.setConnectTimeout(10000);
        return factory;
    }

以上就是“RestTemplate如何設置超時時間及返回狀態碼”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌珠穆沁旗| 平舆县| 绥江县| 昌都县| 旌德县| 易门县| 双牌县| 凤凰县| 封丘县| 青浦区| 建平县| 金沙县| 淳安县| 武威市| 政和县| 馆陶县| 获嘉县| 阆中市| 永清县| 青阳县| 垦利县| 翁源县| 永善县| 紫阳县| 科技| 香河县| 巴林左旗| 通辽市| 林西县| 景谷| 西宁市| 东城区| 黑龙江省| 汪清县| 吐鲁番市| 康乐县| 湘潭县| 斗六市| 长武县| 广东省| 同德县|