真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot全局異常處理類的使用方法

本文以SpringBoot的全局異常處理為例,為大家分析全局異常處理類MyExceptionHandler和MyErrorController的使用方法。閱讀完整文相信大家對SpringBoot全局異常處理類有了一定的認(rèn)識。

創(chuàng)新新互聯(lián),憑借10年的成都網(wǎng)站制作、網(wǎng)站建設(shè)經(jīng)驗(yàn),本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有千余家案例。做網(wǎng)站建設(shè),選創(chuàng)新互聯(lián)。

1. MyExceptionHandler.java 全局異常處理類

如果多個異常處理類,需要在全局異常處理類(本類)之前執(zhí)行,請?zhí)砑?

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

// 只要保證比Ordered.LOWEST_PRECEDENCE 小就可以了
@Order(Ordered.LOWEST_PRECEDENCE - 1)

優(yōu)先執(zhí)行此類,這里不好抓取404、403等錯誤信息
getMaps()請參考獲取request中傳遞過來的參數(shù)信息
getHeaders()請參考獲取request中傳遞過來的header信息
代碼如下:

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

/**
 * 
描述:全局異常處理類
* 優(yōu)先執(zhí)行此異常處理類 *   */ @ControllerAdvice public class MyExceptionHandler {    private final Logger log = LoggerFactory.getLogger(getClass());    @ExceptionHandler(value =Exception.class)    public String exceptionHandler(HttpServletRequest request, Exception e){        Map paramsMap = getMaps(request);        Map headersMap = getHeaders(request);        String requestUri = request.getAttribute("org.springframework.web.servlet.HandlerMapping.lookupPath").toString();        log.error("請求[{}]發(fā)生[{}]異常\r\n參數(shù)[{}]\r\nheader[{}]", requestUri,e.getMessage(),paramsMap,headersMap, e);        // 返回錯誤信息,交給其他異常處理類處理        return e.getMessage();    }    // =================== private method ===================    /**     *
功能:獲取從request中傳遞過來的參數(shù)信息
    *     * @return Map     */    private Map getMaps(HttpServletRequest request){        Map paramMap = new HashMap();        Enumeration enume = request.getParameterNames();        while (enume.hasMoreElements()) {            String key = (String) enume.nextElement();            String[] values = request.getParameterValues(key);            paramMap.put(key, values.length == 1 ? request.getParameter(key).trim() : values);        }        return paramMap;    }    /**     *
功能: 獲取從request中傳遞過來的header信息
    *     * @return Map     */    private Map getHeaders(HttpServletRequest request) {        Map headerMap = new HashMap();        Enumeration er = request.getHeaderNames();//獲取請求頭的所有name值        String headerName;        while(er.hasMoreElements()){            headerName = er.nextElement().toString();            headerMap.put(headerName, request.getHeader(headerName));        }        return headerMap;    } }

2. MyErrorController.java 全局請求錯誤信息處理類

后執(zhí)行此類,此類可以有效抓取,404、403等信息,代碼如下:

import javax.servlet.http.HttpServletRequest;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSONObject;
import com.jnxj.common.vo.MessageBean;

/**
 * 
描述:全局錯誤信息處理
*  執(zhí)行完異常處理類之后執(zhí)行此類 */ @RestController public class MyErrorController implements ErrorController {    @Override    public String getErrorPath() {        return "/error";    }    @RequestMapping("/error")    public String handleError(HttpServletRequest request) {        String message;        // 獲取statusCode:401,404,500        Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");        if (statusCode == 400) {            message = "語義有誤,當(dāng)前請求無法被

看完這篇文章,你們學(xué)會SpringBoot全局異常處理類的使用方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。


網(wǎng)站標(biāo)題:SpringBoot全局異常處理類的使用方法
瀏覽路徑:
http://weahome.cn/article/jdschh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部