SpringBoot与web开发(五) ---- SpringBoot 错误处理机制

本文介绍了SpringBoot的错误处理机制,包括默认的错误页面和JSON数据返回。详细讲解了原理,涉及ErrorMvcAutoConfiguration及关键组件。并阐述了如何自定义错误页面,通过模板引擎或静态目录实现。此外,还讨论了自定义JSON数据的方法,通过编写自定义ErrorAttributes实现类来处理异常并传递数据。
摘要由CSDN通过智能技术生成

SpringBoot 错误处理

SpringBoot 默认错误机制,返回一个错误页面和 json数据

  • 浏览器

在这里插入图片描述

在这里插入图片描述

  • 其它客户端

在这里插入图片描述

在这里插入图片描述

1. 原理

源码 ErrorMvcAutoConfiguration

其中有几个重要的组件:

  • DefaultErrorAttributes : 共享信息

    • timestamp 时间
    • status 状态码
    • error 错误提示
    • exception 异常对象
    • message 异常信息
    • errors JSR303 数据校验的信息
  • DefaultErrorViewResolver

    @Override
    public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
         
       ModelAndView modelAndView = resolve(String.valueOf(status.value()), model);
       if (modelAndView == null && SERIES_VIEWS.containsKey(status.series())) {
         
          modelAndView = resolve(SERIES_VIEWS.get(status.series()), model);
       }
       return modelAndView;
    }
    
    private ModelAndView resolve(String viewName, Map<String, Object> model) {
         
       String errorViewName = "error/" + viewName;
      //使用模板引擎
       TemplateAvailabilityProvider provider = this.templateAvailabilityProviders.getProvider(errorViewName,
             this.applicationContext);
       if (provider != null) {
         
          return new ModelAndView(errorViewName, model);
       }
       //没有模板引擎 自动在静态资源下面去找
       return resolveResource(errorViewName, model);
    }	
    
  • ErrorPageCustomizer : 自定义

  • BasicErrorController : 处理 /error 请求

    @Controller
    @RequestMapping("${server.error.path:${error.path:/error}}")
    public class BasicErrorController extends AbstractErrorController {
         
        //html  浏览器
      	@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
    	public ModelAndView 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值