SpringBoot异常的设计的原理

1,SpringBoot 中是BasicErrorController的基类来是实现错误的。
@Controller
@RequestMapping("KaTeX parse error: Expected '}', got 'EOF' at end of input: …ver.error.path:{error.path:/error}}")
public class BasicErrorController extends AbstractErrorController {}
在springboot项目中,我们可以直接在类中通过局部方法处理异常,也可以继承BasicErrorController 来实现或通过@ControllerAdvice 注解做异常统一处理。在没有做处理时,springboot有默认的错误处理机制——显示默认的错误页面;默认的响应json数据(包含异常发生时间,异常状态,异常详细信息,发生异常的请求路径)。

SpringBoot异常的设计的原理
发生异常时,前端控制器调用全局异常处理器进行处理。

springboot默认错误处理机制:
源码中定制错误的响应规则,默认/error请求为错误请求;BasicErrorController,这个类是默认处理/error请求的,它包含errorHtml和error两个方法,前者返回ModelAndView,后者返回json数据;DefaultErrorViewResolver,指定浏览器响应的错误页面,发生异常时其中resolver方法会解析异常处理地址,得到与错误状态码对应的视图。

BasicErrorController这个类里面有两个方法 errorHtml()和error()方法

@RequestMapping(produces = "text/html")
public ModelAndView errorHtml(HttpServletRequest request,
        HttpServletResponse response) {
    response.setStatus(getStatus(request).value());
    Map<String, Object> model = getErrorAttributes(request,
            isIncludeStackTrace(request, MediaType.TEXT_HTML));
    return new ModelAndView("error", model);
}

@RequestMapping
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
    Map<String, Object> body = getErrorAttributes(request,
            isIncludeStackTrace(request, MediaType.ALL));
    HttpStatus status = getStatus(request);
    return new ResponseEntity<Map<String, Object>>(body, status);
}
 


自定义异常处理:
1)直接在Controller做处理。在Controller处理异常的方法上加上@ExceptionHandler(需要处理的那些异常类);
2)通过@ControllerAdvice 注解来处理统一错误。自定义一个异常处理类加上@ControllerAdvice注解,通过@ExceptionHandler(指定异常类)触发不同的处理方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值