SpringBoot 全局异常统一处理

前言

在实际的项目开发过程中,会有大量的异常发生,而我们并不能将异常信息反馈到用户,所以在返回结果的时候需要对异常进行处理,可是如果在每个Controller返回结果都需要进行异常判断,所以最好的办法就是进行统一异常处理并返回相关异常信息。

使用

全局统一异常器,SpringBoot提供了@RestControllerAdvice注解实现。新建一个GlobalExceptionHandler的全局异常处理器,并在类上标注@RestControllerAdvice注解,如下:

@RestControllerAdvice
public class GlobalExceptionHandler {
}

案例

新建业务层

新建业务层来模拟异常发生,如下:

public interface IndexService {
    String exceptionTest(Integer type) throws Exception;
}

@Service
public class IndexServiceImpl implements IndexService {
    @Override
    public String exceptionTest(Integer type) throws Exception {
        if(type==2){
            throw new Exception("ERROR");
        }
        return "SUCCESS";
    }
}

新建控制层

新建IndexController控制层进行业务层的调用,如下:

@RestController
@RequestMapping("/index")
public class IndexController {

    @Resource
    private IndexService indexService;

    @GetMapping("/{type}")
    public Result index(@PathVariable Integer type) throws Exception {
        indexService.exceptionTest(type);
        return Result.SUCCESS("成功");
    }
}

新建统一异常处理器

新建一个GlobalExceptionHandler的全局异常处理器,并在类上标注@RestControllerAdvice注解,如下:

/**
* 全局统一的异常处理,可以根据自己的业务要求进行详细配置
**/
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
    ** 捕获Exception类型的异常就进行处理
    **/
    @ExceptionHandler({Exception.class})
    public Result exceptionHandler(Exception e){
        System.out.println("出现异常");
        
        // 返回统一处理结果
        return Result.ERROR(e.getMessage());
    }
}

测试

启动应用,使用API调试工具,

访问http://localhost/index/1,返回结果如下:

{
    "code": 200,
    "msg": "SUCCESS",
    "data": "成功"
}

访问http://localhost/index/2,按照代码逻辑,此时抛出异常信息,而我们使用的全局统一处理异常,返回结果如下:

{
    "code": 404,
    "msg": "ERROR",
    "data": null
}

通过返回结果,可以看出程序的异常通过了统一异常处理类进行了处理并返回。

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/615

Previous 2023年4月24日
Next 2023年4月29日

相关推荐

  • SpringBoot 缓存

    简介 缓存主要是为了提高数据的读取速度。 因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大…

    springboot 2023年4月23日
    133
  • SpringBoot 单元测试

    简介 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,在 Spring Boot 2.2.0 版本之前,spring-boot-starter…

    springboot 2023年4月2日
    242
  • SpringBoot 整合Log4j2日志框架

    简介 Apache Log4j 2是日志框架Log4j的升级,它比其前身Log4j 1.x提供了重要的改进, 并且参考了Logback中许多有用的改进,同时修复了Logback的一…

    springboot 2023年3月26日
    153
  • SpringBoot 整合 Lombok

    简介 Lombok其实和Spring Boot关系不太大,只是这个工具太好用了,这里也整理记录一下。 Lombok是一个Java库可以与Java IDE(ItelliJ IDEA、…

    2024年8月28日
    261
  • springboot 注解 @Qualifier

    作用 可以在依赖注入查找候选者的过程中对候选者进行过滤,比如:在需要自动注入java bean时,如果注入的是一个接口,而这个接口又有多个实现类,则会报错,解决方法是在注入接口上增…

    springboot 2022年9月14日
    199
  • Springboot 注解大全-@Import

    作用 @Import可以用来批量导入需要注册的各种类,如普通的类、配置类,完成普通类和配置类中所有bean注册到spring容器中。作用范围:作用于类、注解 定义 参数 value…

    springboot 2022年8月15日
    184
  • SpringBoot 分布式定时任务-Quartz

    简介 Quartz是完全由Java开发的一个开源的作业调度框架。在业务系统中,主要用于做分布式定时任务。Spring本身提供的@Schedule只能实现一些相对简单的单机定时任务,…

    springboot 2023年12月17日
    372
  • Springboot注解-@Component

    作用 作用:@Component的作用是把普通的类实例化到Spring容器中。基于@Component注解有三个扩展,分别是:@Repository、@Service、@Contr…

    springboot 2022年8月3日
    184
  • Springboot 注解 @DependsOn

    作用 @DependsOn用来指定当前bean依赖的bean,spring在创建bean的时候,如果bean之间没有依赖关系,那么spring容器很难保证bean实例创建的顺 序,…

    springboot 2022年9月1日
    368
  • SpringBoot 过滤器

    简介 SpringBoot过滤器在web开发中可以过滤指定的URL,比如拦截掉不需要的接口请求,同时也可以对request和response的内容进行修改。 使用场景 Spring…

    springboot 2023年4月30日
    242