springboot学习----6.错误处理机制
错误处理机制springboot错误消息处理机制:
电脑当访问路径不存在不存在页面默认返回一个错误页面(接收请求:text/html)
而其他客户端(android,ios等等),返回一个json字符串(接收请求:/)
如何定制错误响应:
1.如何定制错误页面
2.如何定制错误json数据
ErrorMvcAutoConfiguration给容器中添加了以下组件:
1.DefaultErrorAttributes:帮我们在页面共享信息
2.BasicErrorController:处理默认的/error请求
3.ErrorPageCustomizer
4.DefaultErrorViewResolver:解析得到决定去哪个页面
步骤:一旦系统出现4xx或5xx,ErrorPageCustomizer就会生效,定制错误的响应规则
系统出现错误后交由BasicErrorController处理error请求,
定制错误页面
1.有模板引擎的情况下:error/状态码,将错误页面命名为错误状态吗.html放在
模板引擎文件夹下的error文件夹下,发生此状态的错误就会去这个页面
我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的错误页面,优先精确匹配
页面能获取的信息:
timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验错误提示
但是如果没有模板引擎(模板引擎找不到),就会在静态资源文件夹下找,没有模板引擎解析,也就没有功能支持
<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
<h1>状态码:[[${status}]]</h1>
<h1 th:text="${#dates.format(timestamp,'yyyy-MM-dd')}"></h1>
<h1>异常信息:[[${message}]]</h1>
<h1>错误提示:[[${error}]]</h1>
</main>
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(value = MyException.class)
public String handleException(HttpServletRequest request){
Map<String,Object> map = new HashMap<>();
request.setAttribute("javax.servlet.error.status_code",520); //定制响应状态码,才会来到我们的5xx,4xx页面
map.put("message","出错了");
map.put("exception",new MyException());
request.setAttribute("extension",map);
return "forward:/error";
}
}
添加自定义字段和消息:
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
Map<String, Object> map = super.getErrorAttributes(webRequest, options);
map.put("admin","yxy"); //添加自定义字段
map.put("extension",webRequest.getAttribute("extension", WebRequest.SCOPE_REQUEST));//添加异常处理器传递过来的信息
return map;
}
}
可以发现是能够正常收到自定义的字段信息的.
本文地址:https://blog.csdn.net/weixin_44246189/article/details/107579338
上一篇: 企业产品推广怎么做?
下一篇: 中秋吃公蟹好不好?中秋为什么吃螃蟹?