5分钟带你快速掌握Spring Boot 自定义错误响应页面
发布日期:2021-06-29 15:51:45
浏览次数:2
分类:技术文章
本文共 2850 字,大约阅读时间需要 9 分钟。
SpringBoot自定义错误响应
目录
1.默认错误响应
使用SpringBoot默认错误响应效果如下:
响应的html源码如下
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Feb 27 19:29:37 CST 2020There was an unexpected error (type=Bad Request, status=400).no user named xiaohong
2.自定义响应页面
在模板引擎目录下新建文件error/4xx.html
编辑4xx.html
error 亲,页面找不到了!
在浏览器中访问一个错误地址,效果如下
说明:可以为不同响应码建立对应的html文件,命名方式为响应码.html
,例如400.html,404.html,没有这些则找4xx.html
3.错误页面参数传递
3.1 默认参数
SpringBoot 默认可以获取的参数有以下几个
timestamp:时间戳 status:状态码 error:错误提示 exception:异常对象 message:异常消息 errors:JSR303数据校验的错误都在这里
重新编辑4xx.html
error 亲,页面找不到了!
timestamp:[[${timestamp}]]
status:[[${status}]]
error:[[${error}]]
path:[[${path}]]
浏览器响应结果
3.2 自定义参数传递
有时候我们需要向错误页面传递一些自定义参数,这种情况下需要进行以下几个步骤
-
编写异常控制器类,并传递参数
-
继承
DefaultErrorAttributes
类,复写getErrorAttributes()
方法 -
在响应页面中使用参数
代码如下
自定义测试Exception
public class UserNotExists extends RuntimeException { public UserNotExists() { this("no such user"); } public UserNotExists(String message) { super(message); } }
编写异常控制器类
@ControllerAdvice public class MyErrorController { @ExceptionHandler(UserNotExists.class)//传入需要处理的异常类 public String handlerUserNotException(Exception e, HttpServletRequest request){ Mapmap=new HashMap<>(); map.put("code","UserNotExists"); map.put("myMessage",e.getMessage()); request.setAttribute("extMap",map);//将传递的参数加入到request中 request.setAttribute("javax.servlet.error.status_code",400);//这里一定要设置响应码,要不然会走向错误的处理流程 return "forward:/error"; } }
继承DefaultErrorAttributes
类,复写getErrorAttributes()
方法
@Component public class MyExceptionHandler extends DefaultErrorAttributes { @Override public MapgetErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { Map errorAttributes = super.getErrorAttributes(webRequest, includeStackTrace);//父类会返回系统默认的参数Map Map extMap = (Map ) webRequest.getAttribute("extMap", 0);//0代表从request中取出参数 Set keySet = extMap.keySet(); //遍历传递过来的map,并将值加入到父类返回的参数map中 for (String s : keySet) { errorAttributes.put(s,extMap.get(s)); } return errorAttributes; } }
重新编写4xx.html
error 亲,页面找不到了!
timestamp:[[${timestamp}]]
status:[[${status}]]
error:[[${error}]]
path:[[${path}]]
code:[[${code}]]
myMessage:[[${myMessage}]]
浏览器响应结果
4.总结
(1)使用上面这种方式可以利用SpringBoot为不同客户端请求发送不同类型数据的特性。例如:浏览器请求发送html页面,其他客户端发送json数据;
(2)参考资料
- 尚硅谷官方视频教程
- B站链接:
转载地址:https://console.blog.csdn.net/article/details/104543704 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月21日 03时05分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
猿来绘Java-36-解决线程安全问题
2019-04-29
猿来绘Java-37-ReentrantLock解决线程安全问题
2019-04-29
猿来绘Java-38-生产者消费者模型
2019-04-29
猿来绘Java-39-JDK8的新日期时间类
2019-04-29
猿来绘Java-40-比较器(Comparable 接口与 CompareTo方法)
2019-04-29
猿来绘Java-41-源码分析String对象的数组的排序(JDK1.8)
2019-04-29
猿来绘Java-42-枚举类的使用
2019-04-29
猿来绘Java-43-初步认识注解
2019-04-29
猿来绘Java-44-自定义注解和元注解
2019-04-29
猿来绘Java-45-JDK8新特性可重复注解和类型注解
2019-04-29
猿来绘Java-46-Collection接口及其方法
2019-04-29
猿来绘Java-47- foreatch 增强for循环
2019-04-29
2021/4/27课堂总结和作业
2019-04-29
2021.4.28课堂总结和作业
2019-04-29
2021.4.29课堂总结
2019-04-29
2021.4.30课堂总结和作业
2019-04-29
需要吗?2000GB+学习视频教程 面试资料免费下载
2019-04-29
MySQL对已存在数据库表添加自增ID字段
2019-04-29
idea中的一些常用快捷键
2019-04-29