热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

九、SpringBoot——默认错误页面&错误页面定制

一、SpringBoot默认的错误处理机制1SpringBoot默认的错误效果1)浏览器,返回一个默认的错误页面浏览器发送请求的请求头2)如果是其他客户端(app),默认响应一个j

一、SpringBoot默认的错误处理机制

1 SpringBoot默认的错误效果

1)浏览器,返回一个默认的错误页面
《九、SpringBoot——默认错误页面&错误页面定制》
浏览器发送请求的请求头
《九、SpringBoot——默认错误页面&错误页面定制》
2)如果是其他客户端(app),默认响应一个json数据(postman模拟)
《九、SpringBoot——默认错误页面&错误页面定制》
客户端的请求头
《九、SpringBoot——默认错误页面&错误页面定制》
3)springboot错误处理原理:
ErrorMvcAutoConfiguration:错误处理的自动配置;它给容器中添加了以下组件。

a ) DefaultErrorAttributes:帮我们在页面共享信息
《九、SpringBoot——默认错误页面&错误页面定制》
b ) BasicErrorController:处理默认/error请求(根据请求头选择具体方法)
《九、SpringBoot——默认错误页面&错误页面定制》
《九、SpringBoot——默认错误页面&错误页面定制》
c)ErrorPageCustomizer:
系统出现错误以后来到error请求进行处理;(web.xml注册的错误页面规则)
《九、SpringBoot——默认错误页面&错误页面定制》

d ) DefaultErrorViewResolver:默认的错误视图解析
《九、SpringBoot——默认错误页面&错误页面定制》
springboot错误处理步骤:
a)一但系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到/error请求;
b)error请求会被BasicErrorController处理(根据请求头进行不同处理);
c)响应页面;去哪个页面是由DefaultErrorViewResolver解析得到的;
《九、SpringBoot——默认错误页面&错误页面定制》

2 如何定制错误响应

1 ) 如何定制错误的页面:

a)、有模板引擎的情况下;error/状态码; 【将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的error文件夹下】,发生此状态码的错误就会来到 对应的页面;
我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误,精确优先(优先寻找精确的状态码.html);

在templates下新建error目录,新建异常页面404.html,400.html,并编写动态错误信息
《九、SpringBoot——默认错误页面&错误页面定制》
浏览器访问不存在的uri,结果如下
《九、SpringBoot——默认错误页面&错误页面定制》
页面能获取的信息;
timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验的错误都在这里

b)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找;
此时错误页面是静态的
不能动态获取页面的timestamp、status等信息

c)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;

2)如何定制错误的json数据:

a ) 自定义异常处理&返回定制json数据;

《九、SpringBoot——默认错误页面&错误页面定制》
缺点:不能自适应,浏览器和postman都返回json
《九、SpringBoot——默认错误页面&错误页面定制》
《九、SpringBoot——默认错误页面&错误页面定制》
b)添加转发到/error进行自适应响应效果处理

《九、SpringBoot——默认错误页面&错误页面定制》
return “forward:/error”;转发到/error请求,会被BasicErrorController(ErrorMvcAutoConfiguration组件)处理做出自适应响应

自适应问题解决了,但是响应状态码默认是200
《九、SpringBoot——默认错误页面&错误页面定制》
需要手动设置错误状态码 request.setAttribute(“javax.servlet.error.status_code”,404);

《九、SpringBoot——默认错误页面&错误页面定制》

c)将我们的定制数据携带出去(终极版);
出现错误以后,会来到/error请求,会被BasicErrorController处理,响应出去可以获取的数据是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)规定的方法);
l)方案一:完全来编写一个ErrorController的实现类【或者是编写AbstractErrorController的子类】,放在容器中,这种方法比较复杂;
ll ) 页面上能用的数据,或者是json返回能用的数据都是通errorAttributes.getErrorAttributes得到;
容器中DefaultErrorAttributes.getErrorAttributes();默认进行数据处理的;
方案二:自定义ErrorAttributes

《九、SpringBoot——默认错误页面&错误页面定制》
0表示从request域中获取
1表示从session域中获取
《九、SpringBoot——默认错误页面&错误页面定制》

最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容,
《九、SpringBoot——默认错误页面&错误页面定制》
《九、SpringBoot——默认错误页面&错误页面定制》
《九、SpringBoot——默认错误页面&错误页面定制》


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本指南详细介绍了如何利用华为云对象存储服务构建视频点播(VoD)平台。通过结合开源技术如Ceph、WordPress、PHP和Nginx,用户可以高效地实现数据存储、内容管理和网站搭建。主要内容涵盖华为云对象存储系统的配置步骤、性能优化及安全设置,为开发者提供全面的技术支持。 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 如何使用ES6语法编写Webpack配置文件? ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在CodeIgniter框架中集成新库文件的过程中,我遇到了一些困惑。具体来说,在跟随nettuts的认证教程时,对于在Welcome控制器中添加的构造函数代码,特别是关于Session的验证部分,我感到不太理解。这部分内容涉及如何确保Session已经初始化并具备相应的功能,这对于实现用户认证至关重要。为了更好地掌握这一知识点,我计划深入研究CodeIgniter的官方文档,并参考更多相关资源,以确保能够正确地集成和使用新库文件。 ... [详细]
author-avatar
心胸宽大的榛子lcf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有