java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot web异常处理

SpringBoot Web开发中的异常处理自动配置原理解析

作者:zl979899

本文给大家介绍SpringBoot Web开发中的异常处理自动配置原理解析,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

默认规则

1. 默认情况下,SpringBoot提供/error处理所有错误的映射

2. 对于机器客户端,它将生成JSON响应,其中包含错误,HTTP状态和异常消息的详细信息

3. 对于浏览器客户端,响应一个“whitelabel”错误视图,以HTML格式呈现相同的数据

4. 自定义错误视图解析规则

定制错误处理逻辑

1. 自定义错误页

2. 方法一:@ExceptionHandler处理异常

/**
 * 处理整个web controller的异常
 */
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    //定义可以处理的异常
    @ExceptionHandler({ArithmeticException.class,
            NullPointerException.class})
    public String handleArithException(Exception e){
        log.error("异常是:{}",e);
        //返回视图地址,也可以返回ModelAndView
        return "login";
    }
}

3. 方法二:@ResponseStatus+自定义异常

//异常响应状态码+异常原因
@ResponseStatus(value= HttpStatus.FORBIDDEN,reason = "用户数量太多")
public class UserTooManyException extends RuntimeException {
    public  UserTooManyException(){
    }
    public  UserTooManyException(String message){
        super(message);
    }
}

4.  Spring底层的异常

5. 方法三:自定义实现 HandlerExceptionResolver 处理异常

//优先级,数字越小优先级越高
@Order(value= Ordered.HIGHEST_PRECEDENCE)
@Component
public class CustomerHandlerExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response,
                                         Object handler, Exception ex) {
        try {
            //状态码+异常信息
            response.sendError(511,"我喜欢的错误");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ModelAndView();
    }
}

6. 关于response.sendError()

异常处理自动配置原理

1. 绑定配置文件的server spring.mvc 

2. 自动添加组件:类型:DefaultErrorAttributes -> id:errorAttributes

3. 自动添加组件:类型:BasicErrorController --> id:basicErrorController

4. 自动添加组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver

异常处理步骤流程

1. doDispatch()中执行controller目标方法

2. 处理handler发生的异常,处理完成返回ModelAndView

3. 默认无法处理目标方法异常时,异常会被抛出

4. 模板引擎响应出错误视图

阅读全文