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

SpringMVC設(shè)置全局異常處理器的步驟

 更新時(shí)間:2024年03月29日 14:27:05   作者:水岸齊天  
在項(xiàng)目中我們有需求做一個(gè)全局異常處理,來(lái)規(guī)范所有出去的異常信息,這篇文章主要介紹了SpringMVC設(shè)置全局異常處理器,需要的朋友可以參考下

背景

在項(xiàng)目中我們有需求做一個(gè)全局異常處理,來(lái)規(guī)范所有出去的異常信息。

參考:官方文檔

分析

首先 ControllerAdvice(RestControllerAdvice ) ,ControllerAdvice 是無(wú)法處理過(guò)濾器和攔截器中的異常的。

引用一張圖

下面介紹controller層的全局異常設(shè)置

全局異常處理也有多種方式

使用@ControllerAdvice(@RestControllerAdvice)+@ExceptionHandler實(shí)現(xiàn)全局異常

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 處理參數(shù)錯(cuò)誤的異常
     * @param e
     * @return
     */
    @ResponseBody
    @ExceptionHandler(value = IllegalParamsException.class)
    public ResultVO<Object> handleIllegalParamsException(IllegalParamsException e) {
        ResultVO<Object> resultVo = new ResultVO<>();
        resultVo.setStatus(HttpStatus.BAD_REQUEST.value());
        resultVo.setErrorCode(e.getErrorInfo().getErrorCode());
        resultVo.setErrorMsg(e.getErrorInfo().getErrorDesc());
        return resultVo;
    }
    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public ResultVO<Object> handleException(Exception e) {
        ResultVO<Object> resultVo = new ResultVO<>();
        resultVo.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
        resultVo.setErrorMsg(e.getMessage());
        return resultVo;
    }
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultVO<T> {
    private Integer status;
    private String errorCode;
    private String errorMsg;
    private T data;
    public ResultVO(Integer status, String errorCode, String errorMsg) {
        this.status = status;
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }
}
public class IllegalParamsException extends RuntimeException {
    private static final long serialVersionUID = -6298406656682893468L;
    private OperationErrorEnum errorInfo;
    public IllegalParamsException(OperationErrorEnum errorInfo) {
        this.errorInfo = errorInfo;
    }
    public IllegalParamsException(String message, OperationErrorEnum errorInfo) {
        super(message);
        this.errorInfo = errorInfo;
    }
    public IllegalParamsException(String message, Throwable cause, OperationErrorEnum errorInfo) {
        super(message, cause);
        this.errorInfo = errorInfo;
    }
    public IllegalParamsException(Throwable cause, OperationErrorEnum errorInfo) {
        super(cause);
        this.errorInfo = errorInfo;
    }
    public IllegalParamsException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace, OperationErrorEnum errorInfo) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.errorInfo = errorInfo;
    }
    public OperationErrorEnum getErrorInfo() {
        return errorInfo;
    }
}

全局異常處理-多個(gè)處理器匹配順序

參考:參考

多個(gè)處理器的兩種情況:

存在一個(gè)類(lèi)中

子類(lèi)異常處理器優(yōu)先

存在不同的類(lèi)中

與多個(gè)異常處理類(lèi)放入LinkedHashMap的順序有關(guān),
可以利用Order指定順序,如果沒(méi)有,則默認(rèn)最小順序;

那么,如果都沒(méi)有指定順序的話,那就是list中的順序

對(duì)于過(guò)濾器和攔截器中的異常,有兩種思路可以考慮

1、catch后通過(guò)轉(zhuǎn)發(fā)到異常頁(yè)面(設(shè)置ModelAndView)
參考:參考

2、攔截器中發(fā)生異常,攔截器中直接返回錯(cuò)誤(通過(guò)response.getOutputStream().write() 直接寫(xiě)錯(cuò)誤信息)
如:

         @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
     try {
     // 業(yè)務(wù)代碼
 } catch (Exception e) {
            response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
            ResultVO<Object> resultVo = new ResultVO<>();
            resultVo.setStatus(HttpStatus.UNAUTHORIZED.value());
            resultVo.setErrorMsg(ACCESS_PARAM_ERROR.getErrorDesc());
            response.getOutputStream().write(new String(JSON.toJSONString(resultVo)).getBytes(StandardCharsets.UTF_8));
            logger.error("==== WhiteListAndAuthenticationInterceptor攔截器攔截到了方法:{} 解析鑒權(quán)參數(shù)異常  ====", methodName);
            return false;
        }
    }

到此這篇關(guān)于SpringMVC設(shè)置全局異常處理器的步驟的文章就介紹到這了,更多相關(guān)SpringMVC全局異常處理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中HttpClient使用方法舉例詳解

    java中HttpClient使用方法舉例詳解

    這篇文章主要介紹了java中HttpClient使用方法的相關(guān)資料,HttpClient提供了發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)的功能,簡(jiǎn)化了HTTP通信的處理,減少了對(duì)外部庫(kù)的依賴,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Java計(jì)時(shí)器StopWatch實(shí)現(xiàn)方法代碼實(shí)例

    Java計(jì)時(shí)器StopWatch實(shí)現(xiàn)方法代碼實(shí)例

    這篇文章主要介紹了Java計(jì)時(shí)器StopWatch實(shí)現(xiàn)方法代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • MyEclipse+Tomcat配置詳解(圖文)

    MyEclipse+Tomcat配置詳解(圖文)

    這篇文章主要介紹了MyEclipse+Tomcat配置詳解(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Spring Security OAuth過(guò)期的解決方法

    Spring Security OAuth過(guò)期的解決方法

    這篇文章主要介紹了Spring Security OAuth過(guò)期的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java基礎(chǔ)之選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)

    Java基礎(chǔ)之選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)

    這篇文章主要介紹了Java基礎(chǔ)之選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring?@Cacheable讀取配置常量方式

    Spring?@Cacheable讀取配置常量方式

    這篇文章主要介紹了Spring?@Cacheable讀取配置常量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Default方法是在java8中引入的關(guān)鍵字,也可稱為Virtual extension methods—虛擬擴(kuò)展方法,這篇文章主要給大家介紹了關(guān)于Java8接口中引入default關(guān)鍵字的本質(zhì)原因,需要的朋友可以參考下
    2022-01-01
  • JDBC 程序的常見(jiàn)錯(cuò)誤及調(diào)試方法

    JDBC 程序的常見(jiàn)錯(cuò)誤及調(diào)試方法

    本文是《Java Web開(kāi)發(fā)教程——入門(mén)與提高篇(JSP+Servlet)》一書(shū)《第9章 JDBC技術(shù)》的補(bǔ)充內(nèi)容。
    2009-06-06
  • java程序代碼與文本對(duì)比實(shí)用工具簡(jiǎn)介

    java程序代碼與文本對(duì)比實(shí)用工具簡(jiǎn)介

    可以對(duì)兩段文本進(jìn)行對(duì)比,檢測(cè)/比較兩個(gè)文本有什么不同的差異,以便修改,常用于程序代碼,就是不需要人工查看,尤其是大文件,有幾百上千行的代碼,這時(shí)候就建議使用比較工具了,不用浪費(fèi)過(guò)多時(shí)間去尋找
    2021-09-09
  • Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例

    Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例

    本篇文章主要介紹了Java解壓縮zip - 解壓縮多個(gè)文件或文件夾實(shí)例,非常具有實(shí)用價(jià)值,有需要的可以了解一下。
    2016-12-12

最新評(píng)論