捕获全局异常,一个@ExceptionHandler捕获一个Exception异常,另一个捕获一个SQL异常会生效哪个
时间: 2023-05-20 10:03:21 浏览: 48
如果一个@ExceptionHandler捕获了一个Exception异常,另一个捕获了一个SQL异常,那么当发生Exception异常时,第一个@ExceptionHandler会生效;当发生SQL异常时,第二个@ExceptionHandler会生效。
相关问题
写一个springmvc全局捕获异常代码完整版
以下是一个 Spring MVC 全局捕获异常的代码示例:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.setViewName("error");
return mav;
}
}
```
这个代码使用了 `@ControllerAdvice` 注解来定义一个全局的异常处理器。当任何一个控制器抛出 `Exception` 类型的异常时,这个处理器就会被调用。在这个处理器中,我们将异常对象添加到 ModelAndView 中,并设置视图名称为 "error"。这个视图可以是一个 JSP 页面,用来显示异常信息。
需要注意的是,这个处理器只能处理控制器中抛出的异常,不能处理其他组件(如过滤器、拦截器等)抛出的异常。如果需要处理其他组件抛出的异常,可以使用 Spring Boot 提供的 `ErrorController` 接口来实现。
springboot 写一个全局异常处理类
要在 Spring Boot 中实现全局异常处理,你可以这样做:
1. 定义一个异常处理类,并实现 Spring 的 `HandlerExceptionResolver` 接口或者使用 `@ControllerAdvice` 和 `@ExceptionHandler` 注解。
2. 在你的异常处理类中,通过使用 `@ExceptionHandler` 注解来声明你要处理的异常类型。
例如,假设你要处理所有类型的异常,你可以这样写:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleException(Exception ex) {
// 处理异常并返回响应
ErrorResponse error = new ErrorResponse();
error.setMessage(ex.getMessage());
return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
```
在这个例子中,我们通过使用 `@ControllerAdvice` 注解声明了这个类是一个全局异常处理类,并使用 `@ExceptionHandler` 注解声明了要处理的异常类型是 `Exception`。你也可以声明多个 `@ExceptionHandler` 注解来处理不同类型的异常。
然后,你可以在你的应用程序中抛出异常,Spring 会自动调用你定义的异常处理方法来处理异常。
注意:如果你使用的是 Spring Boot 2.x 版本,你可以通过实现 `ErrorController` 接口来实现全局异常处理。