RestTemplate微服务调用捕捉服务端异常

2022年7月29日10:15:57

1. restTemplate执行调用前,设置异常处理类

//1.执行调用前,设置异常处理类
restTemplate.setErrorHandler(newCustomResponseErrorHandler());
publicclassCustomResponseErrorHandlerimplementsResponseErrorHandler{private ResponseErrorHandler errorHandler=newDefaultResponseErrorHandler();@OverridepublicvoidhandleError(ClientHttpResponse response)throws IOException{// 对请求头的处理
        List<String> customHeader= response.getHeaders().get("x-app-err-id");

        String svcErrorMessageID="";if(customHeader!= null){
            svcErrorMessageID= customHeader.get(0);}//对body 的处理 (inputStream)
        String body=convertStreamToString(response.getBody());try{
            errorHandler.handleError(response);}catch(RestClientException scx){thrownewCustomException(scx.getMessage(), scx, body);}}@OverridepublicbooleanhasError(ClientHttpResponse response)throws IOException{return errorHandler.hasError(response);}/**
     * inputStream 装换为 string
     */private StringconvertStreamToString(InputStream is){
        BufferedReader reader=newBufferedReader(newInputStreamReader(is));
        StringBuilder sb=newStringBuilder();

        String line= null;try{while((line= reader.readLine())!= null){
                sb.append(line);}}catch(IOException e){
            e.printStackTrace();}finally{try{
                is.close();}catch(IOException e){
                e.printStackTrace();}}return sb.toString();}}

2. 捕捉异常

//捕捉异常try{}catch(CustomException e){
            JSONObject info= JSONObject.parseObject(e.getBody());
            JSONObject meta= JSONObject.parseObject(info.get("meta").toString());
            String message= meta.get("message").toString();
            e.printStackTrace();
            log.error(message, e);}
publicclassCustomExceptionextendsRestClientException{private RestClientException restClientException;private String body;public RestClientExceptiongetRestClientException(){return restClientException;}publicvoidsetRestClientException(RestClientException restClientException){this.restClientException= restClientException;}public StringgetBody(){return body;}publicvoidsetBody(String body){this.body= body;}publicCustomException(String msg, RestClientException restClientException, String body){super(msg);this.restClientException= restClientException;this.body= body;}}

代码网上整合而来的,具体链接忘了…

  • 作者:大都督CM
  • 原文链接:https://blog.csdn.net/weixin_43370380/article/details/123522337
    更新时间:2022年7月29日10:15:57 ,共 1995 字。