欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot学习----6.错误处理机制

程序员文章站 2022-04-07 21:39:18
错误处理机制springboot错误消息处理机制:电脑当访问路径不存在不存在页面默认返回一个错误页面(接收请求:text/html)而其他客户端(android,ios等等),返回一个json字符串(接收请求:/)如何定制错误响应:1.如何定制错误页面2.如何定制错误json数据ErrorMvcAutoConfiguration给容器中添加了以下组件:1.DefaultErrorAttributes:帮我们在页面共享信息2.BasicErrorController:处理默认的/error请求...

错误处理机制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;
    }
}


springboot学习----6.错误处理机制
可以发现是能够正常收到自定义的字段信息的.

本文地址:https://blog.csdn.net/weixin_44246189/article/details/107579338

相关标签: springboot