返回
Spring Boot 全局异常处理,如有万一
见解分享
2023-10-10 17:19:23
前言
在 Spring Boot 应用中,异常处理是一个非常重要的部分,它可以帮助我们及时发现和处理错误,避免应用程序崩溃。在上一篇博文中,我们介绍了一种 Spring Boot 全局异常处理的方法,但那是一种针对所有异常类型的容错机制,虽然方便,但对于某些特殊异常,可能并不适用。
因此,在本文中,我们将介绍另一种 Spring Boot 全局异常处理的方法,它使用统一的 try-catch 机制来处理异常,这种方法的好处是:
- 可以针对不同的异常类型,制定不同的处理策略。
- 错误代码和错误信息更加准确,便于定位问题。
- 可以记录异常信息,方便排查问题。
实现步骤
- 在 Spring Boot 项目中创建一个
BaseExceptionHandler
类,这个类将作为所有异常处理器的父类。
@ControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception ex) {
// 根据异常类型返回不同的错误码和错误信息
if (ex instanceof NullPointerException) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("空指针异常");
} else if (ex instanceof IllegalArgumentException) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("参数不合法");
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("系统错误");
}
}
}
- 创建一个子类来处理具体的异常类型,例如:
@ControllerAdvice
public class NullPointerExceptionHandler extends BaseExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<Object> handleNullPointerException(NullPointerException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("空指针异常");
}
}
- 在 Spring Boot 启动类上添加
@ControllerAdvice
和@ExceptionHandler
注释,以激活异常处理功能。
@SpringBootApplication
@ControllerAdvice
@ExceptionHandler(Exception.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
优点
- 可以针对不同的异常类型,制定不同的处理策略。
- 错误代码和错误信息更加准确,便于定位问题。
- 可以记录异常信息,方便排查问题。
缺点
- 相比于之前的统一异常处理机制,这种方法需要更多的代码来实现。
- 可能会出现遗漏异常的情况,需要考虑周全。
总结
在本文中,我们介绍了 Spring Boot 全局异常处理的另一种方法,这种方法使用统一的 try-catch 机制来处理异常。这种方法的好处是:可以针对不同的异常类型,制定不同的处理策略;错误代码和错误信息更加准确,便于定位问题;可以记录异常信息,方便排查问题。但是,这种方法也有一个缺点,就是需要更多的代码来实现。