一、spring boot默认显示的错误

下面首先演示下没有自定义显示错误信息的默认网页,在spring boot中已经定义好了。 
1、首先定义controller层,用于响应请求

package com.lzj.spring.boot.config;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {/*一、把错误抛在页面上* 1.错误异常自定义在org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class中。*/@RequestMapping("/erro")/*抛出参数不合法的异常到页面*/public String erro(){throw new IllegalArgumentException("arg is empty");}
}

2、spring boot的启动类为:

@SpringBootApplication(scanBasePackages="com.lzj.spring.boot")
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

运行启动类,在浏览器中发送http://localhost:8080/erro请求,由erro()方法响应请求,由于erro()方法抛出异常,并把异常信息返回到请求页面。如下所示,即为spring boot显示异常信息的默认页面。

上面显示错误信息的网页就是spring boot中默认显示的。默认显示的网页已在spring-boot-autoconfigure-1.5.9.RELEASE.jar中的org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class中定义了,源码如下:

private final SpelView defaultErrorView = new SpelView("<html><body><h1>Whitelabel Error Page</h1>"+ "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>"+ "<div id='created'>${timestamp}</div>"+ "<div>There was an unexpected error (type=${error}, status=${status}).</div>"+ "<div>${message}</div></body></html>");

二、tomcat默认显示的错误信息
由于spring boot的默认显示的错误信息已经在ErrorMvcAutoConfiguration类中进行定义了,如果想以tomcat的默认显示错误信息的网页显示错误信息,只需要在容器中扫描时,排除ErrorMvcAutoConfiguration类的bean就可以了。在启动类中定义如下:

/*排除扫描ErrorMvcAutoConfiguration类型的bean*/
@SpringBootApplication(exclude=ErrorMvcAutoConfiguration.class, scanBasePackages="com.lzj.spring.boot")
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

然后在启动启动类,并在浏览器中发送http://localhost:8080/erro请求,浏览器此时显示tomcat的默认显示错误的网页。

三、通过实现ErrorPageRegistrar来注册不同错误类型显示不同的网页

Controller层和启动类不变,下面定义一个配置根据不同错误显示不同网页的配置类。配置类要实现ErrorPageRegistrar类,并且要注入到容器中。

package com.lzj.spring.boot.error;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.boot.web.servlet.ErrorPageRegistrar;
import org.springframework.boot.web.servlet.ErrorPageRegistry;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;@Component
public class MyError implements ErrorPageRegistrar {@Overridepublic void registerErrorPages(ErrorPageRegistry errorPageRegistry) {/*1、按错误的类型显示错误的网页*//*错误类型为404,找不到网页的,默认显示404.html网页*/ErrorPage e404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");/*错误类型为500,表示服务器响应错误,默认显示500.html网页*/ErrorPage e500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");errorPageRegistry.addErrorPages(e404, e500);}}

在/static/目录下分别创建404.html和500.html网页 
404.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1>This is 404 erro page</h1></body>
</html>

500.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1>This is 500 erro page</h1></body>
</html>

启动spring boot工程,在浏览器中发送http://localhost:8080/erro请求,由erro()响应请求,并抛出异常,表示服务器端响应错误,浏览器默认显示505.html,如下所示: 

在浏览器中发送http://localhost:8080/erro2请求,controller层没有响应请求的方法,浏览器默认显示:

上面例子是根据不同的请求响应错误类型显示不同的网页,也可以根据异常类型来显示错误网页。如下所示:

@Component
public class MyError implements ErrorPageRegistrar {@Overridepublic void registerErrorPages(ErrorPageRegistry errorPageRegistry) {/*1、按错误的类型显示错误的网页*/ErrorPage e404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");ErrorPage e500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");/*2、按具体某个异常显示错误的网页*//*当某个异常即可以根据错误类型显示错误网页,由可以根据某个具体的异常来显示错误网页时,优先根据具体的某个异常显示错误的网页*/ErrorPage argsException = new ErrorPage(IllegalArgumentException.class, "/args.html");errorPageRegistry.addErrorPages(e404, e500, argsException);}}

在/static/目录下创建args.html网页 
args.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1>Arg is empty</h1></body>
</html>

启动spring boot工程,在浏览器中发送http://localhost:8080/erro请求,由erro()响应请求,并抛出异常,浏览器默认显示args.html网页。

作者:苍鹰蛟龙

转载:https://blog.csdn.net/u010502101/article/details/78916962

ErrorPageRegistrar根据不同的错误类型显示网页相关推荐

  1. html网页上有错误,打开网页显示网页上有错误的原因!已完毕但网页上有错误的4大解决方法...

    最近,有位朋友在使用浏览器打开某一个站点,浏览器左下角总显示"已完毕,但网页上有错误",并且网页显示不完全,或是空白的,不知道怎么回事.想知道如何解决打开网页显示网页上有错误.针对 ...

  2. PHPExcel报错:谷歌浏览器显示网页可能暂时无法连接,或者它已永久性地移动到了新网址的原因?

    最近接手新项目的时候,本地的phpexcel跑不起来,导出文件的时候报错:"谷歌浏览器显示网页可能暂时无法连接,或者它已永久性地移动到了新网址的原因?",国际惯例,碰到问题先百度, ...

  3. IE浏览器提示无法显示网页的三种情况

    一.IE浏览器出问题了:总是提示:无法显示网页,可能是网络问题或DNS错误! 现象描述:我的IE浏览器总是出现:无法显示网页,可能是网络问题或DNS错误! 或是无法打开网页.高手帮忙... 处理分析: ...

  4. html加了文档声明之后页面错乱,DOCTYPE 文档类型声明(网页爱好者必看)

    DOCTYPE 文档类型声明(网页爱好者必看) 发布时间:2009-11-02 00:59:13   作者:佚名   我要评论 文档类型声明与不声明,将会导致你的css或js都无法正常安装要求显示.所 ...

  5. php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)

    在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...

  6. 错误类型3错误:活动类{}不存在

    本文翻译自:Error type 3 Error: Activity class {} does not exist I have an IntelliJ Android project, that ...

  7. 超级实用的列表提示错误一览显示框

    REPORT ZTEST_DIS_ERROR . *介绍:弹出错误的显示框 DATA : GT_BAPIRET  TYPE  STANDARD  TABLE  OF BAPIRET2 ,        ...

  8. JavaScript学习随记——错误类型

    错误类型: 执行代码期间可能会发生的错误有多种类型.每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象. ECMA-262定义的7种错误类型 Error: 是错误的基类型,其他错误 ...

  9. Internet Explorer 无法显示网页

    前两天碰到这个一个问题.造成的原因是前台留言输入内容过多,则会出现"Internet Explorer 无法显示网页",网上找了一下原因,才知道原来是URL过长,导致的. IE的最 ...

  10. 数据可视化过程中常见的错误类型

    数据可视化是一个沟通复杂信息的强大武器.通过可视化信息,我们的大脑能够更好地抓取和保存有效信息,增加信息的印象.但如果数据可视化做的较弱,反而会带来负面效果.错误的表达会损害数据的传播,完全曲解他们. ...

最新文章

  1. mysql20数据_mysql 插入20万条数据
  2. 22.类对象和类指针
  3. 多行文本注视 php,多行文本进行截断的奇淫巧技
  4. windows上的python能否在unix上使用_怎么用python在Windows系统下,生成UNIX格式文件
  5. Java编程思想 (1~10)
  6. C语言编程计算y,C语言编程入门之--第五章C语言基本运算和表达式-part4
  7. Java网络编程入门(软件结构、网络通信协议、网络编程三要素)
  8. 【Windows优秀软件推荐】:唧唧down——视频和弹幕全清晰度下载
  9. MatLab 中计算开根号
  10. 基于MATLAB的机器人学、机器视觉与控制
  11. 花一个星期时间呕心沥血整理出高频软件测试/自动化测试面试题和答案
  12. 一周新论文 | 2020年第9周 | 自然语言处理相关
  13. 如何在Ubuntu系统下挂载新硬盘(win10+Ubuntu双系统单硬盘挂载新硬盘)
  14. c++ socket 多线程 网络聊天室
  15. 北京社保开户需要的手续及流程
  16. win10定时提醒写日报
  17. 记录一道流量分析的题——攻防世界:流量分析1
  18. 【STM32F407的DSP教程】第48章 STM32F407的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波)
  19. 《预训练周刊》第45期: 冻结语言模型、提示迁移性、快速文档排序
  20. Markdownpad2注册码

热门文章

  1. 如何制定个人理财计划_如何根据经济状况做个人投资理财计划?
  2. linux 查找py文件命令_小命令大作用---linux 下快速查找
  3. SwiftUI实战三:创建List视图和导航Navigation
  4. 计算机博弈军旗程序,军棋机器人UCT算法及计算机博弈行为研究
  5. top conference in AI
  6. java基础学习(7)浅析final,private,public,protected,static等关键以及它们的区别的联系
  7. 计算机网络超详细笔记(五):网络层
  8. 使用MEAT在iOS设备上采集取证信息
  9. 浅谈MySQL存储引擎
  10. textContent与innerText