Springboot异常处理

Posted 香菜+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot异常处理相关的知识,希望对你有一定的参考价值。

系列文章:https://gamwatcher.blog.csdn.net/article/details/124603278

1、异常分类

在日常开发时,总会有这样那样的异常,大致可以分为下面几类

1. 参数异常:前端上传数据格式,或者参数缺少等问题

2. 数据库异常:访问数据库时候的一些异常,比如断线,超时等

3. 业务异常:业务过程中产生或者主动抛出的异常,比如服务调用异常,服务错误异常、逻辑业务异常等等

4. 未知异常:不属于以上三种异常的情况,

2、Springboot异常

SpringBoot 内置了了异常的响应,可以通过/error请求查看效果,或者使用不存在的地址访问

3、异常的处理

3.1 常规操作 @ExceptionHandler

  • @ExceptionHandler:负责处理 controller 标注的类中抛出的异常的注解

  • @RestControllerAdvice:能够将 @ExceptionHandler 标注的方法集中到一个地方进行处理的注解,这个注解是复合注解,实现了

@ControllerAdvice和@ResponseBody的功能。为所有的 Controller 织入增强方法

3.2 定制404 异常

因为现在应用都是前后端分离,在访问一些不存在的地址的时候做一些特殊定制。

默认情况下,SpringBoot是不会抛出404异常的,所以@ControllerAdvice也不能捕获到404异常。我们可以通过以下配置来让这个注解能捕获到404异常。

spring:
  mvc:
    throw-exception-if-no-handler-found: true
  web:
    resources:
      add-mappings: false

throw-exception-if-no-handler-found:当发现404异常时直接抛出异常。

add-mappings:关闭默认的静态资源路径映射。这样404错误也能被捕获到,但是这个配置会让你的静态资源访问出现问题,也就是不适合前后端不分离的情况。

3.3 过滤器异常无法捕获原因

  • ControllerAdvice不能捕获过滤器抛出的异常,对于此类异常需要特别处理。异常处理需要设置特别的处理类。

  • BasicErrorController不经过过滤器,tomcat直接调用了BasicErrorController,把结果作为原来请求的返回。客户端没有真的去请求BasicErrorController,也就没有经过过滤器一说

4、show me code

写个异常的处理类吧

@ControllerAdvice
public class GlobalExceptionHandler 
    /**
     * 处理其他异常
     */
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResultVO exceptionHandler(Exception e) 
        return new ResultVO("500","",null);
    
    /**
     * 处理业务异常
     */
    @ExceptionHandler(value = BzException.class)
    @ResponseBody
    public ResultVO bzExceptionHandler(Exception e) 
        return new ResultVO("501","",null);
    
    /**
     * 处理数据库异常
     */
    @ExceptionHandler(value = DBException.class)
    @ResponseBody
    public ResultVO DBExceptionHandler(Exception e) 
        return new ResultVO("502","",null);
    

这里自定义了三个异常,可以开发中根据需求将异常进行分类

这里的异常码是随便写的,在开发中可以定义枚举,将具体的报错信息放入枚举中

5、总结

异常处理这个没有太深入,因为现在基本上这种方式就解决了大部分问题

赠人玫瑰,手留余香,求关注,点赞,收藏

1本书精通剪映手机版+电脑版:63个抖音热门影视特效案例剖析+103集同步教学视频+132个练习素材文件+精美的PPT课件,28万粉丝都喜欢的影视剪辑与特效制作技巧,让你快速成长为行业大咖!

以上是关于Springboot异常处理的主要内容,如果未能解决你的问题,请参考以下文章

Springboot全局异常处理

spring 或 springboot统一异常处理

Spring Boot 异常处理,值得学习……

Spring Boot 异常处理,值得学习!

spring-- springboot配置全局异常处理器

SpringBoot系列: Spring支持的异常处理方式