SpringBoot 错误处理机制

image

关注我,一个仍存梦想的屌丝程序员,每天为你分享高质量编程博客。

回复 “代金券” 免费获取腾讯云和阿里云代金券

SpringBoot 错误处理机制_第1张图片
image

1、如何定制错误的页面;

(1.1)有模板引擎的情况下
将错误页面命名为错误状态码.html放在模板引擎文件夹里面的error文件夹下,当程序发生此状态码的错误就会来到对应的错误页面;

SpringBoot 错误处理机制_第2张图片
image

我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误,精确优先(优先寻找状态码.html,其次是4xx或5xx.html);

错误页面能获取的信息:

timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验的错误都在这里

status:[[${status}]]

error:[[${error}]]

exception:[[${exception}]]

message:[[${message}]]

errors:[[${errors}]]

timestamp:[[${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}]]

(1.2)没有模板引擎(模板引擎找不到这个错误页面)
静态资源文件夹下找相关的错误页面

SpringBoot 错误处理机制_第3张图片
image

SpringBoot会在默认的静态资源文件路径下找错误页面,但这个页面不能动态获取错误信息

(1.3)以上都没有错误页面
就是默认来到SpringBoot默认的错误提示页面

2、如何定制错误的json数据

无论浏览器还是Postman等其他访问方式都会返回json格式的错误信息

/**
 * 异常处理器
 */
@ControllerAdvice
public class MyExceptionHandler {
​
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map handleException(Exception e/*传入异常的信息*/){
        Map map = new HashMap<>();
        map.put("code",1);
        map.put("message",e.getMessage());
        return map;
    }
}

浏览器进入定制的错误页面,Postman照常返回json格式

 @ExceptionHandler(MyException.class)
    public String handleException(Exception e/*传入异常的信息*/, HttpServletRequest request){
        Map map = new HashMap<>();
        System.out.println(e);
        // 传入自己的状态码
        request.setAttribute("javax.servlet.error.status_code",404);
        map.put("code",1);
        map.put("message",e.getMessage());
        return "forward:/error";
    }

主要操作是:传入自己的状态码request.setAttribute("javax.servlet.error.status_code",4xx);,如果没有这行代码,浏览器访问异常会自动跳到SpringBoot默认的错误页面

定制数据加入到json里返回给客户端,并且浏览器响应为指定错误页面

@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
​
    @Override
    public Map getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
        Map map = super.getErrorAttributes(webRequest, includeStackTrace);
        map.put("company","myErrorHandler"); // 可以给json返回值添加自己的字段和值
​
        // 将异常处理器的异常值保存在request里,然后在这里取出来保存起来
        Map resultMap = (Map) webRequest.getAttribute("result",0);
        map.put("result",resultMap);
        return map;
    }
}
/*--(分割线)---------------异常处理器MyExceptionHandler--------------*/
    @ExceptionHandler(MyException.class)
    public String handleException(Exception e/*传入异常的信息*/, HttpServletRequest request){
        Map map = new HashMap<>();
        System.out.println(e);
        // 传入自己的状态码
//        request.setAttribute("javax.servlet.error.status_code",404);
        map.put("code",1);
        map.put("message",e.getMessage());
        // 保存到request里
        request.setAttribute("result",map);
        return "forward:/error";
    }

页面上能用的数据,或者是json返回能用的数据都是通过errorAttributes.getErrorAttributes得到;,容器中默认使用DefaultErrorAttributes.getErrorAttributes()方法进行数据处理的;

SpringBoot 错误处理机制_第4张图片
image

返回结果

回复 ” spring boot “ 获取 spring boot 相关文章

回复关键字:

1、回复 “10” 查看 最有价值的10个spring boot开源项目

2、回复 “国旗” 获取国旗头像教程

3、回复 “Ubuntu” 获取100 个最佳 Ubuntu 应用 和 linux神器

4、回复 “ idea ” 获取**最新idea破解教程 和 装逼神奇

5、回复 “ ssh ” 获取史上最好的 ssh工具 支持mac

6、回复 “ 代金券 ” 腾讯云和阿里云代金券

7、回复 “免费” 可以获取免费的java面试资源和学习视频

SpringBoot 错误处理机制_第5张图片
image

推荐阅读:

springboot集成ES实现磁盘文件全文检索

oauth2 认证服务器 资源服务器分离 使用Redis存储Token

Spring Boot最核心的27个注解,你了解多少?

Spring-Boot-Starter开发手册全集

MySQL优化-一篇文章就够了(转发加收藏吧)

程序员一般可以从什么平台接私活?

看完这14张思维导图,你的python才算入门

手把手讲解 OkHttp硬核知识点(1)

Python 爬取微信公众号文章和评论 (有源码)

Java 开发人员常用的服务配置(Nginx、Tomcat、JVM、Mysql、Redis)

腾讯电话面试总结—Linux运维工程师

python爬虫:(嘿嘿嘿)爬你喜欢的照片

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来..

教你迅雷&百度非会员也能享受不限速的特权

Chrome开发者工具(DevTools)使用技巧

100个最有价值的开源项目--微信开发系列

IDEA 2019 最新激活教程

一台Linux服务器可以负载多少个连接?(底部有福利)

免责声明:

1.本公众号所转载文章均来自公开网络。

2.如果出处标注有误或侵犯到原著作者权益,请联系删除。

3.转载本公众号中的文章请注明原文链接和作者,否则产生的任何版权纠纷均与本公众号无关。

你可能感兴趣的:(SpringBoot 错误处理机制)