日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot中定制異常頁面的實(shí)現(xiàn)方法

瀏覽:2日期:2023-04-26 10:04:17

定制異常頁面,可以避免用戶產(chǎn)生恐慌心理,使得產(chǎn)品有更好的用戶體驗(yàn)。今天來學(xué)習(xí)在 SpringBoot 中如何定制開發(fā)異常頁面

一、歷史回顧

在 SpringMVC 年代,我們的異常頁面一般配置在 web.xml 文件中,如下:

<!-- 配置404頁面 --><error-page> <error-code>404</error-code> <location>/error/404.html</location> </error-page>

這里我們指定了異常請(qǐng)求狀態(tài)碼 404,然后配置了 404 異常請(qǐng)求的頁面地址,這就意味著如果某一個(gè)請(qǐng)求發(fā)生了 404 異常,則會(huì)出現(xiàn) 404.html 界面

二、SpringBoot中配置

1、默認(rèn)異常頁面

SpringBoot中定制異常頁面的實(shí)現(xiàn)方法

這是 SpringBoot 中默認(rèn)的異常頁面,返回的是一堆異常信息和異常狀態(tài)碼,那用戶固然是看不懂這些信息的,容易使得用戶產(chǎn)生恐慌的心里,從而影響產(chǎn)品的用戶體驗(yàn)

2、定制異常頁面

SpringBoot 中定制異常頁面非常簡(jiǎn)單,我們需要一個(gè)配置文件 ExceptionPageConfig.java

import org.springframework.boot.web.server.ConfigurableWebServerFactory;import org.springframework.boot.web.server.ErrorPage;import org.springframework.boot.web.server.WebServerFactoryCustomizer;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.HttpStatus;/** * 統(tǒng)一異常頁面處理 * * @Author Lizhou **/@Configurationpublic class ExceptionPageConfig { /** * SpringBoot2.0以上版本 * WebServerFactoryCustomizer代替之前版本的EmbeddedWebServerFactoryCustomizerAutoConfiguration * * @return */ @Bean public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() { return (container -> { ErrorPage error400Page = new ErrorPage(HttpStatus.BAD_REQUEST, '/400'); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, '/404'); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, '/500'); container.addErrorPages(error400Page, error404Page, error500Page); }); }}

可以看出,這里我們配置了 400、404、500 三種異常頁面,然后我們需要編寫 API 請(qǐng)求異常頁面 SysExceptionController.java

import com.zyxx.common.utils.PasswordUtils;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.apache.shiro.SecurityUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;/** * <p> * 前端控制器 * </p> * * @author lizhou * @since 2020-07-15 **/@Api(tags = '后臺(tái)管理端--異常處理')@Controllerpublic class SysExceptionController { @ApiOperation(value = '請(qǐng)求400頁面', notes = '請(qǐng)求400頁面') @GetMapping('400') public String badRequest() { return 'sys/exception/400'; } @ApiOperation(value = '請(qǐng)求404頁面', notes = '請(qǐng)求404頁面') @GetMapping('404') public String notFound() { return 'sys/exception/404'; } @ApiOperation(value = '請(qǐng)求500頁面', notes = '請(qǐng)求500頁面') @GetMapping('500') public String serverError() { return 'sys/exception/500'; }}

API 寫好,下面我們就需要開發(fā)異常頁面的展示信息了,這里貼一張頁面吧,404.html

import com.zyxx.common.utils.PasswordUtils;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.apache.shiro.SecurityUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;/** * <p> * 前端控制器 * </p> * * @author lizhou * @since 2020-07-15 **/@Api(tags = '后臺(tái)管理端--異常處理')@Controllerpublic class SysExceptionController { @ApiOperation(value = '請(qǐng)求400頁面', notes = '請(qǐng)求400頁面') @GetMapping('400') public String badRequest() { return 'sys/exception/400'; } @ApiOperation(value = '請(qǐng)求404頁面', notes = '請(qǐng)求404頁面') @GetMapping('404') public String notFound() { return 'sys/exception/404'; } @ApiOperation(value = '請(qǐng)求500頁面', notes = '請(qǐng)求500頁面') @GetMapping('500') public String serverError() { return 'sys/exception/500'; }}

然后所需要的 exception.css

.error .clip .shadow { height: 180px;}.error .clip:nth-of-type(2) .shadow { width: 130px;}.error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow { width: 250px;}.error .digit { width: 150px; height: 150px; line-height: 150px; font-size: 120px; font-weight: bold;}.error h2 { font-size: 32px;}.error .msg { top: -190px; left: 30%; width: 80px; height: 80px; line-height: 80px; font-size: 32px;}.error span.triangle { top: 70%; right: 0%; border-left: 20px solid #535353; border-top: 15px solid transparent; border-bottom: 15px solid transparent;}.error .container-error-404 { top: 50%; margin-top: 250px; position: relative; height: 250px; padding-top: 40px;}.error .container-error-404 .clip { display: inline-block; transform: skew(-45deg);}.error .clip .shadow { overflow: hidden;}.error .clip:nth-of-type(2) .shadow { overflow: hidden; position: relative; box-shadow: inset 20px 0px 20px -15px rgba(150, 150, 150, 0.8), 20px 0px 20px -15px rgba(150, 150, 150, 0.8);}.error .clip:nth-of-type(3) .shadow:after, .error .clip:nth-of-type(1) .shadow:after { content: ''; position: absolute; right: -8px; bottom: 0px; z-index: 9999; height: 100%; width: 10px; background: linear-gradient(90deg, transparent, rgba(173, 173, 173, 0.8), transparent); border-radius: 50%;}.error .clip:nth-of-type(3) .shadow:after { left: -8px;}.error .digit { position: relative; top: 8%; color: white; background: #1E9FFF; border-radius: 50%; display: inline-block; transform: skew(45deg);}.error .clip:nth-of-type(2) .digit { left: -10%;}.error .clip:nth-of-type(1) .digit { right: -20%;}.error .clip:nth-of-type(3) .digit { left: -20%;}.error h2 { font-size: 24px; color: #A2A2A2; font-weight: bold; padding-bottom: 20px;}.error .tohome { font-size: 16px; color: #07B3F9;}.error .msg { position: relative; z-index: 9999; display: block; background: #535353; color: #A2A2A2; border-radius: 50%; font-style: italic;}.error .triangle { position: absolute; z-index: 999; transform: rotate(45deg); content: ''; width: 0; height: 0;}@media (max-width: 767px) { .error .clip .shadow { height: 100px; } .error .clip:nth-of-type(2) .shadow { width: 80px; } .error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow { width: 100px; } .error .digit { width: 80px; height: 80px; line-height: 80px; font-size: 52px; } .error h2 { font-size: 18px; } .error .msg { top: -110px; left: 15%; width: 40px; height: 40px; line-height: 40px; font-size: 18px; } .error span.triangle { top: 70%; right: -3%; border-left: 10px solid #535353; border-top: 8px solid transparent; border-bottom: 8px solid transparent; } .error .container-error-404 { height: 150px; }}

所需要的 exception.js

.error .clip .shadow { height: 180px;}.error .clip:nth-of-type(2) .shadow { width: 130px;}.error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow { width: 250px;}.error .digit { width: 150px; height: 150px; line-height: 150px; font-size: 120px; font-weight: bold;}.error h2 { font-size: 32px;}.error .msg { top: -190px; left: 30%; width: 80px; height: 80px; line-height: 80px; font-size: 32px;}.error span.triangle { top: 70%; right: 0%; border-left: 20px solid #535353; border-top: 15px solid transparent; border-bottom: 15px solid transparent;}.error .container-error-404 { top: 50%; margin-top: 250px; position: relative; height: 250px; padding-top: 40px;}.error .container-error-404 .clip { display: inline-block; transform: skew(-45deg);}.error .clip .shadow { overflow: hidden;}.error .clip:nth-of-type(2) .shadow { overflow: hidden; position: relative; box-shadow: inset 20px 0px 20px -15px rgba(150, 150, 150, 0.8), 20px 0px 20px -15px rgba(150, 150, 150, 0.8);}.error .clip:nth-of-type(3) .shadow:after, .error .clip:nth-of-type(1) .shadow:after { content: ''; position: absolute; right: -8px; bottom: 0px; z-index: 9999; height: 100%; width: 10px; background: linear-gradient(90deg, transparent, rgba(173, 173, 173, 0.8), transparent); border-radius: 50%;}.error .clip:nth-of-type(3) .shadow:after { left: -8px;}.error .digit { position: relative; top: 8%; color: white; background: #1E9FFF; border-radius: 50%; display: inline-block; transform: skew(45deg);}.error .clip:nth-of-type(2) .digit { left: -10%;}.error .clip:nth-of-type(1) .digit { right: -20%;}.error .clip:nth-of-type(3) .digit { left: -20%;}.error h2 { font-size: 24px; color: #A2A2A2; font-weight: bold; padding-bottom: 20px;}.error .tohome { font-size: 16px; color: #07B3F9;}.error .msg { position: relative; z-index: 9999; display: block; background: #535353; color: #A2A2A2; border-radius: 50%; font-style: italic;}.error .triangle { position: absolute; z-index: 999; transform: rotate(45deg); content: ''; width: 0; height: 0;}@media (max-width: 767px) { .error .clip .shadow { height: 100px; } .error .clip:nth-of-type(2) .shadow { width: 80px; } .error .clip:nth-of-type(1) .shadow, .error .clip:nth-of-type(3) .shadow { width: 100px; } .error .digit { width: 80px; height: 80px; line-height: 80px; font-size: 52px; } .error h2 { font-size: 18px; } .error .msg { top: -110px; left: 15%; width: 40px; height: 40px; line-height: 40px; font-size: 18px; } .error span.triangle { top: 70%; right: -3%; border-left: 10px solid #535353; border-top: 8px solid transparent; border-bottom: 8px solid transparent; } .error .container-error-404 { height: 150px; }}

三、測(cè)試

項(xiàng)目啟動(dòng)后,我們?cè)L問一個(gè)并不存在的 API

SpringBoot中定制異常頁面的實(shí)現(xiàn)方法

那,通過訪問一個(gè)項(xiàng)目中并不存在的 API,得到 404 頁面,頁面可以提示一些友好的文字,從而安撫用戶緊張的心理,其實(shí)也是一個(gè)不錯(cuò)的選擇吧

到此這篇關(guān)于SpringBoot中定制異常頁面的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)SpringBoot 定制異常頁面內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品视频一区二区三区四蜜臂 | 蜜桃视频一区二区| 亚洲高清二区| 国产综合视频| 宅男噜噜噜66国产日韩在线观看| 97在线精品| 成人看片网站| 午夜久久影院| 老牛影视一区二区三区| 中文字幕日韩亚洲| 日本免费一区二区视频| 国产麻豆一区| 高清一区二区三区| 久久精品国内一区二区三区水蜜桃| 亚洲综合在线电影| 99在线精品免费视频九九视 | 久久裸体视频| 99国产精品久久久久久久| 伊人精品视频| 西西人体一区二区| 午夜精品影视国产一区在线麻豆| 91成人在线精品视频| 免费亚洲一区| 91av亚洲| 黄色欧美日韩| 日韩精品欧美精品| 国产成人在线中文字幕| 国产一区视频在线观看免费| 蜜桃视频在线观看一区| 国产精品亚洲综合久久| 日韩精品第一区| 亚洲一区二区成人| 欧美日一区二区在线观看| 精品视频网站| 成人羞羞视频在线看网址| 91久久中文| 国产精品亚洲欧美一级在线| 91综合网人人| 噜噜噜躁狠狠躁狠狠精品视频| 日韩精品亚洲专区在线观看| 高清不卡一区| 视频一区二区三区在线| 欧美精品第一区| 国户精品久久久久久久久久久不卡| 亚洲精品黄色| 亚洲一级少妇| 日韩 欧美一区二区三区| 极品av在线| 亚洲开心激情| 国产一区二区视频在线看| 99视频精品免费观看| 国产亚洲一区二区三区不卡| 亚洲91久久| 欧美天堂一区二区| 国产精品av一区二区| 国产免费久久| 最新亚洲激情| 成人在线视频免费看| 午夜在线视频一区二区区别 | 久久只有精品| 香蕉久久久久久久av网站| 国产精成人品2018| 亚洲国产影院| 精品理论电影在线| 亚洲精品综合| 999精品在线| 国产精品成人自拍| 99香蕉国产精品偷在线观看| 欧美国产极品| 亚洲免费成人av在线| 亚洲精品一级二级| 国产精品久久久久久久久免费高清 | 粉嫩av一区二区三区四区五区| 久久av一区| a天堂资源在线| 日韩av三区| 亚洲精品一区二区在线看| 精品美女视频| 久久精品99久久久| 天使萌一区二区三区免费观看| 波多野结衣久久精品| 国产精品亚洲欧美日韩一区在线 | 尤物在线精品| 高清一区二区三区| 国产免费av国片精品草莓男男| 亚洲一区二区免费看| 成人羞羞在线观看网站| 精品国产中文字幕第一页| 日韩一区二区三区四区五区| 日韩视频中文| 韩国三级一区| 91亚洲国产成人久久精品| 国产精品高潮呻吟久久久久| 免费观看在线综合| 免费黄色成人| 久久久久一区| 天堂中文av在线资源库| 国产精品香蕉| 日本不卡高清| 亚洲精品极品| 在线一区二区三区视频| 亚洲美洲欧洲综合国产一区| 久久久久.com| 国产麻豆久久| 欧美日韩国产观看视频| 国产一区二区三区不卡视频网站 | 国产精品久久久久久久久久白浆| 综合激情一区| 免费久久精品视频| 夜夜嗨av一区二区三区网站四季av| 欧美一区久久久| 国产suv精品一区二区四区视频| 国产亚洲高清在线观看| 日韩免费精品| 久久国产免费看| 国产视频网站一区二区三区| 亚洲欧美久久| 亚洲欧美日韩精品一区二区 | 日韩福利在线观看| 日韩欧美激情| 久久精品99久久久| 国产免费av国片精品草莓男男 | 久久97视频| 国产一区二区三区成人欧美日韩在线观看 | 久久精品超碰| 国产精品一国产精品k频道56| 777久久精品| 国产欧美午夜| 久久三级中文| 在线一区av| 久久九九精品| 国产视频一区欧美| 亚洲ww精品| 欧美精品福利| 国产一区调教| 国产成人精品一区二区三区在线| 国产成人77亚洲精品www| 裤袜国产欧美精品一区| 久久精品亚洲| 亚洲伊人av| 亚洲女同中文字幕| 亚洲五月综合| 国产精品极品在线观看| 国产精品xx| 亚洲福利免费| 日韩制服丝袜av| 69堂精品视频在线播放| 国产极品模特精品一二| 岛国av在线网站| 黄色成人在线网址| 日韩一区二区三区精品| 麻豆精品在线| 99久久久国产精品美女| 亚洲激情社区| 欧美日韩精品一区二区三区视频 | 国产综合婷婷| 在线一区二区三区视频| **爰片久久毛片| 色一区二区三区四区| 欧美特黄一级| 91精品丝袜国产高跟在线| 国产精品大片免费观看| 日韩大片在线| 综合一区二区三区| 精品视频在线一区二区在线| 久久男女视频| 亚洲精品精选| 国产成人精品一区二区三区视频| 午夜久久一区| 国产精品毛片aⅴ一区二区三区| 欧美aa在线观看| 亚州国产精品| 日韩一区二区在线免费| 视频一区二区国产| 精品三级av| 午夜在线观看免费一区| 久久激情五月婷婷| 99久久亚洲精品| 91嫩草精品| 久久精品国产大片免费观看| 日本精品在线播放| 播放一区二区| 国产日韩中文在线中文字幕 | 中文av在线全新| 亚洲综合婷婷| 成人日韩在线| 91精品视频一区二区| 欧美一区二区三区高清视频| 91亚洲无吗| 欧美精品一区二区三区精品| 亚洲狼人精品一区二区三区| 日本久久精品| 日韩高清一级| 欧美成人高清| 麻豆国产精品| 少妇精品久久久一区二区| 激情亚洲影院在线观看| 欧美偷窥清纯综合图区| 欧美精品九九| 丁香六月综合|