springboot aop 统一异常
时间: 2023-08-19 17:07:14 浏览: 247
在Spring Boot中,可以使用AOP(面向切面编程)来实现统一异常处理。下面是一个简单的示例:
首先,在你的Spring Boot项目中创建一个全局异常处理类,例如 `GlobalExceptionHandler`。
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception ex) {
// 处理异常逻辑
// 返回自定义的异常信息
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("发生异常,请联系管理员");
}
}
```
在上面的代码中,我们使用了 `@ControllerAdvice` 注解来标识全局异常处理类,并使用 `@ExceptionHandler` 注解来指定处理的异常类型。
接下来,我们需要在Spring Boot应用程序的入口类上添加 `@EnableAspectJAutoProxy` 注解以启用AOP功能。
```java
@SpringBootApplication
@EnableAspectJAutoProxy
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
```
然后,创建一个切面类来捕获所有被 `@Controller` 或 `@RestController` 注解标识的类中抛出的异常,并将其委托给全局异常处理类进行处理。
```java
@Aspect
@Component
public class ExceptionAspect {
@Autowired
private GlobalExceptionHandler globalExceptionHandler;
@Pointcut("@within(org.springframework.stereotype.Controller) || @within(org.springframework.web.bind.annotation.RestController)")
public void controllerPointcut() {}
@AfterThrowing(pointcut = "controllerPointcut()", throwing = "ex")
public Object handleException(JoinPoint joinPoint, Exception ex) throws Throwable {
return globalExceptionHandler.handleException(ex);
}
}
```
在上面的代码中,我们使用 `@Aspect` 注解标识该类为切面类,并使用 `@Component` 注解将其作为Spring组件进行管理。
通过 `@Pointcut` 注解指定切入点,我们选择了所有被 `@Controller` 或 `@RestController` 注解标识的类。
在 `@AfterThrowing` 注解中,我们指定了切入点为 `controllerPointcut()`,并指定了异常类型为 `Exception`,在方法中调用全局异常处理类的方法进行异常处理。
这样,当被 `@Controller` 或 `@RestController` 注解标识的类中抛出异常时,切面类会捕获到异常并委托给全局异常处理类进行处理。
这就是使用AOP实现Spring Boot统一异常处理的基本步骤。你可以根据自己的需求进行扩展和定制化。
阅读全文