常见异常
在 Spring 开发中,常见的异常通常与框架配置、依赖注入、数据库操作、事务管理等相关。以下是常见的异常类型及其解决方法,以及如何实现全局统一异常处理。
1. 常见异常及解决方法
1.1 BeanCreationException
- 原因:Bean 创建失败,通常是由于依赖注入问题或配置错误。
- 解决方法:
- 检查 Bean 的依赖是否正确注入。
- 确保配置文件或注解配置正确。
- 查看堆栈信息,定位具体问题。
1.2 NoSuchBeanDefinitionException
- 原因:Spring 容器中找不到指定的 Bean。
- 解决方法:
- 检查 Bean 是否被正确扫描或配置。
- 确保
@Component
、@Service
、@Repository
等注解正确使用。 - 检查包扫描路径是否正确配置。
1.3 NullPointerException
- 原因:空指针异常,通常是由于依赖注入失败或未初始化对象。
- 解决方法:
- 确保依赖注入的 Bean 不为空。
- 使用
@Autowired(required = false)
避免强制注入。
1.4 DataAccessException
- 原因:数据库操作异常,通常是由于 SQL 错误或数据库连接问题。
- 解决方法:
- 检查 SQL 语句是否正确。
- 确保数据库连接配置正确。
- 使用事务管理机制处理异常。
1.5 TransactionException
- 原因:事务管理异常,通常是由于事务配置错误或数据库操作失败。
- 解决方法:
- 检查
@Transactional
注解的使用是否正确。 - 确保事务管理器配置正确。
- 检查
1.6 HttpMessageNotReadableException
- 原因:HTTP 请求体解析失败,通常是由于 JSON 格式错误或类型不匹配。
- 解决方法:
- 检查请求体的 JSON 格式是否正确。
- 确保请求参数与后端类型匹配。
1.7 MethodArgumentNotValidException
- 原因:方法参数校验失败,通常是由于
@Valid
注解校验不通过。 - 解决方法:
- 检查校验注解(如
@NotNull
、@Size
)的使用是否正确。 - 确保请求参数符合校验规则。
- 检查校验注解(如
2. 全局统一异常处理
Spring 提供了多种方式实现全局统一异常处理,常用的方式包括:
2.1 使用 @ControllerAdvice
和 @ExceptionHandler
-
说明:
@ControllerAdvice
用于定义全局异常处理类,@ExceptionHandler
用于处理特定异常。 -
示例:
@ControllerAdvice public class GlobalExceptionHandler { // 处理所有异常 @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception ex) { return