1. 程式人生 > >RestTemplate 使用中,異常報錯處理

RestTemplate 使用中,異常報錯處理

使用RestTemplate過程中, 如果介面返回的不是200狀態,則會丟擲異常報錯。但在實際介面對接中,可能希望獲取介面返回的異常資訊做返回。因此可以自定義RestTemplate異常的處理:

實現方式:

建立一個自己的ExceptionHandler類,實現ResponseErrorHandler介面,程式碼:

package com.walletServer.config;

import java.io.IOException;

import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;

public class ThrowErrorHandler implements ResponseErrorHandler {

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        // 返回false表示不管response的status是多少都返回沒有錯
        // 這裡可以自己定義那些status code你認為是可以拋Error
        return false;
    }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // 這裡面可以實現你自己遇到了Error進行合理的處理
    }

}

在Application配置裡面定義RestTemplate時,指定異常 控制器為此控制器:

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        RestTemplate restTemplate=new RestTemplate(factory);
        //Response status code 4XX or 5XX to the client.
        restTemplate.setErrorHandler(new ThrowErrorHandler());
        return restTemplate;
    }

然後使用RestTemplate時,可以根據返回狀態做判斷:

    /**
     * 請求Tos節點服務
     * @param reqVO
     * @return
     */
    private JSONObject requestTos(JSONObject reqVO, String getAuthorization) {
        // Authorization傳遞
        headers.add(HttpHeaders.AUTHORIZATION, getAuthorization);

        HttpEntity<Object> entity = new HttpEntity<>(reqVO, headers);

        log.info("------------------TosUtils.requestTos() -start, url=" + baseUrl + ", param=" + reqVO);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(baseUrl, entity, String.class);
        log.info("------------------TosUtils.requestTos() -end, result=" + responseEntity);
        if (!responseEntity.getStatusCode().is2xxSuccessful()) {
            log.info("------------------TosUtils.requestTos() -errorBody: {}", responseEntity.getBody());
            throw new RestClientException(responseEntity.getBody());
        }

        JSONObject resultJson = JSON.parseObject(responseEntity.getBody());
        return resultJson;
    }

相關推薦

RestTemplate 使用異常處理

使用RestTemplate過程中, 如果介面返回的不是200狀態,則會丟擲異常報錯。但在實際介面對接中,可能希望獲取介面返回的異常資訊做返回。因此可以自定義RestTemplate異常的處理: 實現方式: 建立一個自己的ExceptionHandler類,實現Res

Oracle11g靜默安裝dbcanetca處理--直接跟換操作系統

update npr 處理 grep gist net flags button been 最近給一個客戶安裝oracle 11gr2 概述: 操作系統:linux 32位操作系統 [oracle@nbsrfx response]$ uname -aLinux nb

python異常處理

1.使用try...except捕捉異常 try:   s=1/0 except IndexError:   print ('except') except KeyError:   print ('Keyerror') except ZeroDivisionError:   print ('Z

time.strftime:格式化字符串含中文處理

port 格式化輸出 cal 結果 報錯 hour error dst ror import time print(time.strftime("%Y年%m月%d日 %H時%M分%S秒",time.localtime())) 報錯: UnicodeEncodeErro

CentOS7安裝過程磁盤大於2T的處理

系統問題描述 服務器磁盤單盤空間大於2TB,在安裝CentOS7時出現下圖報錯: Boot failure.Reboot and Select proper Boot device... 問題原因: 安裝CentOS 7時,如果硬盤容量小於2TB,系統默認會使用MBR格式來安裝。如果大於2TB則需要使

在flask框架對wtforms的SelectMultipleField的一個處理

pre inf req ESS multi bmi 其中 ews IT 先粘貼代碼: form.py文件: users = SelectMultipleField( label="請選擇用戶", validators=[ DataRequired(

vue 前端對null的處理專案使用v-if判斷陣列長度是length

說明:以前做伺服器開發的時候,前端人員總是說,不要傳null過來,不要傳null過來,傳“”空字串過來都可以。當時就想,為啥不能傳null,你前端做下判斷不就行了嗎。 沒想到現在自己既開發前端,又開發後臺,就遇到了這個問題。 其實真的就是坐下 !=null就可以了。 例子: &nbs

mysql儲存emoji表情處理qq互聯mysql儲存暱稱帶表情的資料時報

前言      做qq互聯登入時發現一個問題,如果qq暱稱中有表情時存入mysql資料庫會報錯。 java.sql.SQLException: Incorrect string value: "ð" for colum n "name" at row 1 a

linq日期格式轉換或者比較程序說不支持方法的解決辦法

格式 var lec fun edi nbsp diff sql 方法 public void TestMethod1(){using (var _context = new hotelEntities()){var rq = DateTime.Now.Date;var q

VBA在32位下沒問題到64位異常

隱式 ati else 但是 設置 判斷代碼 報錯 重要 位或 64 位 Visual Basic for Applications 概述Microsoft Visual Basic for Applications (VBA) 是 Microsoft Office 附帶的

Hibernate卡住然後java.sql.SQLException: Unknown system variable 'language'異常

ops environ instance bcf end int strong roo variables 啟動應用的時候會卡在: 08:22:58,221 DEBUG IntegratorServiceImpl:46 - Adding Integrator [org.hi

IDEA Spark 讀Hbase 處理

ado htable client ets rim ogg expec zookeep ati SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 17/11/19 14:25:57 E

MyBatissqlSession操作數據庫但無法實現數據修改(增、改、刪)

修改 () brush light pub clas java bat job public void addCustomerTest() throws Exception { SqlSession sqlSession = MyBatisUtils.ge

【微信】微信小程序 微信開發工具新創建的json文件編譯VM1781:2 pages/module/module.json 文件解析錯誤 SyntaxError: Unexpected end of JSON input

page class 報錯 技術分享 微信開發 圖片 alt http ges 如果新創建報錯:編譯報錯VM1781:2 pages/module/module.json 文件解析錯誤 SyntaxError: Unexpected end of JSON input

CSDN程式碼內容複製後在程式格式處理方法

很多人遇到程式程式碼複製後格式問題報錯後,往往都是直接一行一行的調節格式內容,可能程式碼量不多,一般花費10-40分鐘都可以調節過來,但其實不需要這麼麻煩,可以總結一些簡單的方法: 1、拷貝程式程式碼 2、程式設計軟體中整體報錯

2018年10月8日django檢視版本命令python2&3print區別iterableSSH,pycharm/ubuntu顏色設定

檢視Django版本的命令: 1. 在終端中輸入: python -m django –-version 2. 進入python互動環境:        import django    &nb

藍鯨平臺本地上傳大檔案ERR_CONNECTION_RESE處理client intended to send too large body:server: paas.blueking.com

[[email protected] etc]# pwd /data/bkce/etc [[email protected] etc]# vim nginx.conf [[email protected] nginx]# pw

curl: (35) SSL connect error處理更新nss版本;Linux版本centos7下載樹

處理 請求命令 curl -O https:// xxx 時候,報錯curl: (35) SSL connect error 原因是nss版本有點舊了,yum -y update nss更新一下 Linux7下載樹地址: http://mirrors.163.com/centos

Python安裝bs4後pycharmModuleNotFoundError: No module named 'bs4'

本文主要分享關於在對應python版本中安裝beautifulsoup之後,在程式碼執行時還會提示“No module named 'bs4'”的問題。 首先需要檢查一下,自己安裝beautifulsoup的版本與用來執行程式碼的python版本是不是一致的,為了防止出問題,我將python2與

微信開發者工具初始化專案時進去:小程式重啟耗時過久請確認業務邏輯是否有複雜運算或者死迴圈

              如圖上,為錯誤原因。   之前用開發者工具用的好好地,前些日子又版本更新,升級了一下,然後開啟專案就出現上面的問題。當時以為電腦出啥問題了,也沒當回事。今天再次開啟開發者工具,發現還是出現上面的問題。一臉懵,新建專案,啥都沒做竟然出問題。網上一查同樣的問題一大堆。