SpringBoot异常处理,全局异常处理

文章讲述了后端如何通过控制层、全局异常处理类以及自定义异常处理来向前端传递错误信息。通过示例代码展示了当出现异常时,如何设计和实现将异常信息转换为响应返回给前端,包括直接测试异常、全局异常处理类的编写以及自定义异常类的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.思考

我知道的后端向前端返回数据的地方有两个。
一是前端访问后端接口很顺利,后端将状态码和信息返回给前端。
二是前端访问后端接口,出现问题抛出异常,抛出异常被全局异常处理将信息返回给前端。
问题就在于抛出的异常这块是如何将信息从后端传递到前端的

2.试验

2.1 控制层


@RestController
@RequestMapping("/Exception")
public class testController {
        @GetMapping("/test")
        public String test() {
            int i = 1 / 0;
            return "test exception";
        }
}

2.2直接测试

后台对抛出的异常不做处理的话,后台显示信息,而前端不显示。
在这里插入图片描述
在这里插入图片描述

2.3 全局异常处理类

@Slf4j
@ControllerAdvice
public class GlobalExceptionAdvice {

    @ExceptionHandler({Exception.class})
    @ResponseBody
    public Object handleException(HttpServletRequest request, Exception e) throws Exception {
        log.error(e.getMessage(), e);
      
        HashMap<String, Object> map = new HashMap<>();
        map.put("message", "全局异常处理" + e.getMessage());
        return map;
    }

}

2.4测试

访问项目路径,可以发现后端抛出的报错信息传递给前端了
在这里插入图片描述

3.自定义异常处理

3.1控制器层

 @GetMapping("/test1")
    public String test1(){
        Boolean flag = true;
        if (flag != false) {
            throw new TestException("逻辑判断错误-自定义异常类");
        }
        return "test success";
    }

3.2自定义异常

public class TestException extends RuntimeException{
    public TestException(String message) {
        super(message);
    }
}

3.3全局异常处理

@Slf4j
@ControllerAdvice
public class GlobalExceptionAdvice {

    @ExceptionHandler({TestException.class})
    @ResponseBody
    public Object TestException(HttpServletRequest request, Exception e) throws Exception {
        log.error(e.getMessage(), e);
        HashMap<String, Object> map = new HashMap<>();
        map.put("message", "逻辑异常处理--" + e.getMessage());
        return map;
    }

}

3.4测试

这样就可以在前端返回自己写的异常了。
在这里插入图片描述
还可以在全局异常处理中填写上http状态码和code码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值