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

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码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot中,可以通过自定义全局异常处理器来处理应用程序中的异常。以下是一种常见的实现方式: 1. 创建一个自定义的异常处理器类,例如 `GlobalExceptionHandler`。 ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception ex) { // 处理异常逻辑 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error"); } @ExceptionHandler(YourCustomException.class) public ResponseEntity<String> handleYourCustomException(YourCustomException ex) { // 处理自定义异常逻辑 return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage()); } // 可以继续添加其他的异常处理方法 } ``` 2. 在 `GlobalExceptionHandler` 类上使用 `@ControllerAdvice` 注解,以告诉Spring该类为全局异常处理器。 3. 在 `handleException` 方法中,可以根据不同的异常类型进行处理,例如返回不同的HTTP状态码和错误信息。 4. 如果有自定义的异常,可以在 `GlobalExceptionHandler` 类中添加对应的异常处理方法。 5. 在异常发生时,Spring Boot将会调用匹配的异常处理方法来处理异常。如果没有匹配的方法,将会调用默认的异常处理方法。 这样,当应用程序中出现异常时,就会被全局异常处理器捕获,并根据相应的处理逻辑返回错误响应。 注意:以上只是一种实现方式,你可以根据具体需求进行自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值