中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot自定義錯誤頁面方式有哪些

發布時間:2021-11-29 13:32:02 來源:億速云 閱讀:191 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringBoot自定義錯誤頁面方式有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot自定義錯誤頁面方式有哪些”吧!

以前web.xml方式

先來看下在web.xml中配置錯誤頁面的方式:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
</error-page>

SpringBoot中實現方式

在SpringBoot后,可以通過如下幾種方式實現自定義錯誤頁面。

1.實現EmbeddedServletContainerCustomizer的bean

適合內嵌服務器,先在controller中定義我們的錯誤頁面Mapping,通過在配置類中實現EmbeddedServletContainerCustomizer的bean,加入對應狀態碼的錯誤頁面。注意這種方式在打成war后,供外部tomcat使用時,將會失效。

定義錯誤頁面:

   @RequestMapping(value = "/error/[code]")
    public String error(@PathVariable int code, Model model) {
        String pager = "/content/error-pager";
        switch (code) {
            case 404:
                model.addAttribute("code", 404);
                pager = "/content/error-pager";
                break;
            case 500:
                model.addAttribute("code", 500);
                pager = "/content/error-pager";
                break;
        }
        return pager;
    }

在配置類中加入EmbeddedServletContainerCustomizer:

  /**
     * 配置默認錯誤頁面(僅用于內嵌tomcat啟動時)
     * 使用這種方式,在打包為war后不起作用
     *
     * @return
     */  
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
        return container -> {
            ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
            ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
            container.addErrorPages(error404Page, error500Page);
        };

2.通過攔截器方式

適合內嵌Tomcat或者war方式。

/**
 * @author hgs
 * @version ErrorPageInterceptor.java, v 0.1 2018/03/04 20:52 hgs Exp $
 * <p>
 * 錯誤頁面攔截器
 * 替代EmbeddedServletContainerCustomizer在war中不起作用的方法
 */
@Component
public class ErrorPageInterceptor extends HandlerInterceptorAdapter {
    private List<Integer> errorCodeList = Arrays.asList(404, 403, 500, 501);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
        Exception {
       if (errorCodeList.contains(response.getStatus())) {
            response.sendRedirect("/error/" + response.getStatus());
            return false;
        }
        return super.preHandle(request, response, handler);
    }
}

在配置類中添加攔截

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(errorPageInterceptor);//.addPathPatterns("/action/**", "/mine/**");默認所有
        super.addInterceptors(registry);
    }
}

3.自定義靜態error頁面方法

在resource/templates下添加error.html頁面,springBoot會自動找到該頁面作為錯誤頁面,適合內嵌Tomcat或者war方式。

SpringBoot錯誤視圖提供了以下錯誤屬性:

  • timestamp:錯誤發生時間;

  • status:HTTP狀態嗎;

  • error:錯誤原因;

  • exception:異常的類名;

  • message:異常消息(如果這個錯誤是由異常引起的);

  • errors:BindingResult異常里的各種錯誤(如果這個錯誤是由異常引起的);

  • trace:異常跟蹤信息(如果這個錯誤是由異常引起的);

  • path:錯誤發生時請求的URL路徑。

SpringBoot使用的前端框架模板不同,頁面的名稱也有所不同:

  • 實現Spring的View接口的Bean,其ID需要設置為error(由Spring的BeanNameViewResolver所解析);

  • 如果配置了Thymeleaf,則需命名為error.html的Thymeleaf模板;

  • 如果配置了FreeMarker,則需命名為error.ftl的FreeMarker模板;

  • 如果配置了Velocity,則需命名為error.vm的Velocity模板;

  • 如果是用JSP視圖,則需命名為error.jsp的JSP模板。

Thymeleaf實例:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${title}"></title>
</head>
<body class="layout">
<div class="wrap">
    <!-- S top -->
    <div th:include="/header/module-header::module-header"></div>
    <!-- S 內容 -->
    <div class="panel-l container clearfix">
        <div class="error">
            <p class="title"><span class="code" th:text="${status}"></span>非常抱歉,沒有找到您要查看的頁面</p>
            <a href="/" rel="external nofollow"  class="btn-back common-button">返回首頁
                <img class="logo-back" src="/img/back.png">
            </a>
            <div class="common-hint-word">
                <div th:text="${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}"></div>
                <div th:text="${messages}"></div>
                <div th:text="${error}"></div>
            </div>
        </div>
    </div>
</div>
</div>
</body>
</html>

對于外部Tomcat第三中方案是比較推薦的一種實現方式,但不夠靈活,我們不好定義自己的屬性,如果想對其做相應修改,可以參見源碼BasicErrorController,通過繼承AbstractErrorController,并重寫errorHtml方法,達到自己想要的效果。在內嵌Tomcat時,第一種推薦使用,更具靈活性。

感謝各位的閱讀,以上就是“SpringBoot自定義錯誤頁面方式有哪些”的內容了,經過本文的學習后,相信大家對SpringBoot自定義錯誤頁面方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

修文县| 赤城县| 马尔康县| 宁夏| 桃江县| 黔西县| 莱芜市| 襄汾县| 南部县| 清流县| 平凉市| 永川市| 沁源县| 松潘县| 大名县| 长垣县| 台南县| 巢湖市| 华坪县| 山西省| 政和县| 老河口市| 博野县| 同心县| 武功县| 黔西县| 汝南县| 东阳市| 沙田区| 偃师市| 河西区| 唐河县| 山西省| 阿克苏市| 西昌市| 四子王旗| 永昌县| 遂溪县| 石景山区| 广水市| 昭觉县|