让我来详细讲解一下 "SpringBoot实战之处理异常案例详解" 的完整攻略。
一、了解SpringBoot异常处理
在SpringBoot中处理异常主要是通过@ControllerAdvice注解 和@ExceptionHandler注解实现的。
@ControllerAdvice注解在类上,主要用来处理全局的异常。而@ExceptionHandler注解主要用来处理自定义的异常及其他异常。
在@ControllerAdvice中可以定义多个@ExceptionHandler方法,每个方法用来处理对应的异常。当程序抛出异常时,SpringBoot会首先从上往下匹配@ExceptionHandler方法,并执行匹配的方法。
比如在@ControllerAdvice中声明了两个@ExceptionHandler方法,分别用来处理NullPointerException和RuntimeException两种不同的异常。当程序中出现NullPointerException异常时,SpringBoot会自动调用匹配NullPointerException异常的@ExceptionHandler方法进行处理。
二、如何处理异常
下面我们通过两个示例来介绍如何在SpringBoot中处理异常。
示例1:处理自定义异常
首先定义一个自定义异常类MyException,代码如下:
public class MyException extends RuntimeException {
public MyException(String message) {
super(message);
}
}
在Controller中抛出该异常:
@GetMapping("/test")
public String test() {
throw new MyException("出现自定义异常");
}
然后在@ControllerAdvice中通过@ExceptionHandler指定处理该异常的方法:
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(MyException.class)
@ResponseBody
public ResultVO handleMyException(MyException e) {
return new ResultVO(-1, e.getMessage());
}
}
在handleMyException方法中,我们返回一个ResultVO对象,其中code和msg分别表示异常的状态码和异常信息。这里我们为了简化,直接在ResultVO类中定义了code和msg两个属性。
示例2:处理全局异常
定义一个Controller,代码如下:
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
int i = 1 / 0;
return "test";
}
}
在Controller中故意制造一个除以0的异常。然后在@ControllerAdvice中处理该异常:
@ControllerAdvice
public class MyExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultVO handleException(Exception e) {
return new ResultVO(-1, "系统繁忙,请稍后重试");
}
}
在handleException方法中,我们处理所有未处理的异常,并返回一个固定的ResultVO对象。
三、总结
通过以上两个示例,我们可以看到SpringBoot异常处理的过程和方法。在@ControllerAdvice中可以处理全局异常、自定义异常等情况。需要注意的是,在@ExceptionHandler方法中要返回一个ResultVO对象来表示异常的状态和信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot实战之处理异常案例详解 - Python技术站