最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月10日 12:00:22   作者:Asurplus、  
這篇文章主要介紹了SpringBoot中定制異常頁(yè)面的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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

一、歷史回顧

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

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

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

二、SpringBoot中配置

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


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

2、定制異常頁(yè)面

SpringBoot 中定制異常頁(yè)面非常簡(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)一異常頁(yè)面處理
 *
 * @Author Lizhou
 **/
@Configuration
public 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 三種異常頁(yè)面,然后我們需要編寫(xiě) API 請(qǐng)求異常頁(yè)面 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)管理端--異常處理")
@Controller
public class SysExceptionController {

  @ApiOperation(value = "請(qǐng)求400頁(yè)面", notes = "請(qǐng)求400頁(yè)面")
  @GetMapping("400")
  public String badRequest() {
    return "sys/exception/400";
  }

  @ApiOperation(value = "請(qǐng)求404頁(yè)面", notes = "請(qǐng)求404頁(yè)面")
  @GetMapping("404")
  public String notFound() {
    return "sys/exception/404";
  }

  @ApiOperation(value = "請(qǐng)求500頁(yè)面", notes = "請(qǐng)求500頁(yè)面")
  @GetMapping("500")
  public String serverError() {
    return "sys/exception/500";
  }
}

API 寫(xiě)好,下面我們就需要開(kāi)發(fā)異常頁(yè)面的展示信息了,這里貼一張頁(yè)面吧,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)管理端--異常處理")
@Controller
public class SysExceptionController {

  @ApiOperation(value = "請(qǐng)求400頁(yè)面", notes = "請(qǐng)求400頁(yè)面")
  @GetMapping("400")
  public String badRequest() {
    return "sys/exception/400";
  }

  @ApiOperation(value = "請(qǐng)求404頁(yè)面", notes = "請(qǐng)求404頁(yè)面")
  @GetMapping("404")
  public String notFound() {
    return "sys/exception/404";
  }

  @ApiOperation(value = "請(qǐng)求500頁(yè)面", notes = "請(qǐng)求500頁(yè)面")
  @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問(wèn)一個(gè)并不存在的 API


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

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

相關(guān)文章

最新評(píng)論

桐柏县| 昆明市| 长子县| 双桥区| 余干县| 吕梁市| 玉门市| 定日县| 宜城市| 唐海县| 雅安市| 庄河市| 湘潭县| 陵川县| 遵义市| 海阳市| 陆良县| 成都市| 佛坪县| 阿拉善左旗| 汝州市| 辉南县| 临潭县| 江源县| 广昌县| 乌拉特前旗| 利川市| 丽江市| 顺平县| 加查县| 磴口县| 青岛市| 太仆寺旗| 丽江市| 浠水县| 宁都县| 兴宁市| 怀柔区| 呼图壁县| 津市市| 木兰县|