SpringBoot全局異常錯(cuò)誤頁(yè)面的示例分析

這篇文章給大家介紹SpringBoot 全局異常錯(cuò)誤頁(yè)面的示例分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)香坊,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

SpringBoot 全局異常錯(cuò)誤頁(yè)面

1. 創(chuàng)建項(xiàng)目,依賴Web 和 thymeleaf

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

2. 準(zhǔn)備兩個(gè)異常錯(cuò)誤頁(yè)面

在template中創(chuàng)建error文件夾,在error文件夾中創(chuàng)建4xx.html 和 5xx.html

SpringBoot 全局異常錯(cuò)誤頁(yè)面的示例分析

3.準(zhǔn)備自定義錯(cuò)誤處理類

com.zhl.springbootexceptionjunit.controller.MyBasicErrorController

  • SpringBoot 出現(xiàn)異常時(shí)會(huì)查找 /error 視圖, 如果沒有則會(huì)根據(jù)錯(cuò)誤碼查找對(duì)應(yīng) error/400.html 之類的錯(cuò)誤靜態(tài)頁(yè)面

  • 此處重寫ErrorController,實(shí)現(xiàn)/error 視圖,根據(jù)錯(cuò)誤類型,跳轉(zhuǎn)至對(duì)應(yīng)的視圖,由于使用視圖技術(shù),需引用模板引擎(本例用thymeleaf)

package com.zhl.springbootexceptionjunit.controller;import org.springframework.boot.web.servlet.error.ErrorController;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.context.request.ServletWebRequest;import org.springframework.web.context.request.WebRequest;import javax.servlet.http.HttpServletRequest;import java.util.Date;import java.util.HashMap;import java.util.Map;/** * 定制ErrorController,目的是能使SpringBoot找到自己定制的錯(cuò)誤頁(yè)面 * 大部分的代碼BasicController一致,關(guān)鍵點(diǎn)是修改錯(cuò)誤頁(yè)面的路徑 */@Controller@RequestMapping(value = "/error")public class MyBasicErrorController implements ErrorController {@RequestMapping(produces = {"text/html"})//返回給瀏覽器    public String handlerError(HttpServletRequest request, Model model){
        WebRequest webRequest = new ServletWebRequest(request);//對(duì)request進(jìn)行包裝,目的是能操作更多的方法        HttpStatus status = this.getStatus(request);//獲取status        String path = (String) webRequest.getAttribute("javax.servlet.error.request_uri", 0);
        String message = (String) webRequest.getAttribute("javax.servlet.error.message", 0);if(message.equals("")){
            message = "No Available Message";
        }//攜帶錯(cuò)誤數(shù)據(jù)信息        model.addAttribute("timestamp", new Date());
        model.addAttribute("statusCode", status.value());
        model.addAttribute("error", status.getReasonPhrase());
        model.addAttribute("message", message);
        model.addAttribute("path", path);int i = status.value() / 100;//判斷是4xx還是5xx錯(cuò)誤        if(i == 4){return "error/4xx";//使用自己定制的錯(cuò)誤頁(yè)面        }else if(i == 5){return "error/5xx";//使用自己定制的錯(cuò)誤頁(yè)面        }return null;
    }@RequestMapping//返回給客戶端    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        WebRequest webRequest = new ServletWebRequest(request);//對(duì)request進(jìn)行包裝,目的是能操作更多的方法        HttpStatus status = this.getStatus(request);//獲取status        Map<String, Object> map = new HashMap<>();if (status == HttpStatus.NO_CONTENT) {return new ResponseEntity(status);
        } else {

            String path = (String) webRequest.getAttribute("javax.servlet.error.request_uri", 0);
            String message = (String) webRequest.getAttribute("javax.servlet.error.message", 0);

            map.put("timestamp", new Date());
            map.put("statusCode", status.value());
            map.put("error", status.getReasonPhrase());
            map.put("message", message);
            map.put("path", path);return new ResponseEntity(map, status);
        }
    }protected HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");if (statusCode == null) {return HttpStatus.INTERNAL_SERVER_ERROR;
        } else {try {return HttpStatus.valueOf(statusCode);
            } catch (Exception var4) {return HttpStatus.INTERNAL_SERVER_ERROR;
            }
        }
    }@Override    public String getErrorPath() {return "null";
    }
}

4.測(cè)試 代碼

com.zhl.springbootexceptionjunit.controller.UsersController

@Controllerpublic class UsersController {@RequestMapping("showinfo")public String showinfo(){
        String str=null;
        str.length();return "ok";
    }
}

測(cè)試1,運(yùn)行時(shí)錯(cuò)誤:

SpringBoot 全局異常錯(cuò)誤頁(yè)面的示例分析

測(cè)試2:無資源的情況

SpringBoot 全局異常錯(cuò)誤頁(yè)面的示例分析

關(guān)于SpringBoot 全局異常錯(cuò)誤頁(yè)面的示例分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前題目:SpringBoot全局異常錯(cuò)誤頁(yè)面的示例分析
轉(zhuǎn)載來源:http://bm7419.com/article38/gighpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、微信小程序、響應(yīng)式網(wǎng)站、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站