Springboot应用中如何对异常进行统一处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

在Springboot应用中,我们经常会面临各种异常的处理,如果异常处理分散在代码各个地方的话,一方面增加了很多重复处理异常的工作量,另一方面也不好进行维护。其实Springboot是可以实现对异常的统一处理的,常用的有两种方式,我们来看下。


一、AOP方式

AOP方式,可以在服务层、controller层、其他任何层中捕获并处理异常。可以定义切面并使@Around注解来捕获方法抛出的异常,然后执行自定义的处理逻辑。

1. 引入Spring AOP的相关依赖

在pom.xml文件中引入Spring AOP的相关依赖。

    <!-- Spring AOP -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

2. 创建异常统一处理类

使用@Aspect注解创建异常统一处理类

@Aspect
@Component
public class ServiceExceptionHandler {

    private static final Logger LOGGER =  LoggerFactory.getLogger(ServiceExceptionHandler.class);

    @Around("execution(* com.example.demo.app.*.*(..))")
    public Object handleServiceException(ProceedingJoinPoint joinPoint) throws Throwable {
        try {
            // 执行Service层方法            
            return joinPoint.proceed();
        } catch (BusinessException e) {
            // 捕获ServiceException并处理            
            // 例如,记录日志、返回自定义错误消息等            
            LOGGER.error("业务异常", e);
            return ResultWrapper.error(e.getErrorCode(), e.getMessage());
        }
    }
}

二、@RestControllerAdvice注解方式

使用@RestControllerAdvice注解对controller层进行统一异常处理。

代码如下:

@RestControllerAdvice
public class ExceptionAdvice {

    private static final Logger LOGGER =  LoggerFactory.getLogger(ExceptionAdvice.class);

    @ExceptionHandler(IllegalArgumentException.class)
    public ResultWrapper handleIllegalArgumentException(IllegalArgumentException e) {
        LOGGER.error("参数非法", e);
        return ResultWrapper.error(ErrorCode.INVALID_INPUT.getCode(), e.getMessage());
    }

    @ExceptionHandler(BusinessException.class)
    public ResultWrapper handleBusinessException(BusinessException e) {
        LOGGER.error("业务异常", e);
        return ResultWrapper.error(e.getErrorCode(), e.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResultWrapper handleException(Exception e) {
        LOGGER.error("异常错误", e);
        return ResultWrapper.error(ErrorCode.INTERNAL_SERVER_ERROR.getCode(), e.getMessage());
    }

}


总结

在Spring Boot中,可以使用AOP、@RestControllerAdvice注解方式来对异常进行统一处理,以提高代码的可维护性和错误处理的一致性。其中AOP方式可以在服务层、controller层、其他任何层中捕获并处理异常,适用范围较广。@RestControllerAdvice注解方式则是针对controller层进行统一异常处理。我们可以根据具体场景来选择具体的方式实现对异常的统一处理。

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值