java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot全局异常

springboot全局异常处理方式

作者:q***4718

文章介绍了Spring Boot中处理异常的两种方式,还详细解释了@ControllerAdvice和@ExceptionHandler注解的用法,并通过一个示例展示了全局异常处理的效果,感兴趣的朋友跟随小编一起看看吧

一、springboot中处理异常的方式?

1、try…catch处理异常

如果采用这种方式,虽然可以解决,但是存在弊端,需要我们在保存其他业务数据时,也需要在其他方法中加上try…catch进行处理,代码冗余,不通用。

2、全局异常处理器

Spring Boot的全局异常处理是通过@ControllerAdvice@RestControllerAdvice注解的类来实现的。这些类可以捕获和处理应用程序中的异常,并返回统一的错误响应。

二、为什么需要全局异常处理?

三、全局异常处理实现

全局异常处理类

package com.example.demo.exception;
import com.example.demo.response.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = {Exception.class})
    public Result<String> ex(Exception e)
    {
        return Result.error(e.getMessage());
    }
}

controller类

    @GetMapping("test")
    public int test(){
        List<Integer> integers = new ArrayList<>();
        for (int i = 0; i < 10; i++){
            integers.add(i);
        }
        //故意数组过界
        for (int i = 0; i < 20; i++){
            System.out.println(integers.get(i));
        }
        return 1;
    }

result结果类

package com.example.demo.response;
import lombok.Data;
@Data
public class Result<T> {
    private int code;
    private String msg;
    private T data;
    public Result() {
    }
    public Result(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static Result<String> error(String message) {
        return new Result(500, message, null);
    }
}

四、测试

我下面使用到的工具是apifox,当然你也可以直接使用postman或者浏览器测试。

启动springboot项目

使用apifox发送请求,请求结果如下所示:

这个地方我们就可以发现实际上就是自动的帮我们做了异常处理了,当然我给的这个实例只是针对于全部的异常而不是自定义的异常。

五、@ControllerAdvice详解

@ControllerAdvice 是 Spring MVC 提供的一个注解,用于定义一个类作为全局异常处理器。使用这个注解的类可以捕获和处理来自 Spring MVC 控制器的异常。

以下是 @ControllerAdvice 注解的一些关键点:

当然@ControllerAdvice也是可以设置参数的,可以设置不是作用于全部的controller下,具体实例如下所示:

@RestControllerAdvice(annotations = {RestController.class})
???????@ControllerAdvice(annotations = {RestController.class, Controller.class})

六、@ExceptionHandler 详解

1.用法:

2.参数:

3.异常处理逻辑:

4.多个异常处理方法:

到此这篇关于springboot全局异常处理方式的文章就介绍到这了,更多相关springboot全局异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文