下面我将详细讲解 SpringMVC 全局异常处理的三种方式。
1. 在 Controller 中捕获并处理异常
首先,我们可以在 Controller 中通过 @ExceptionHandler
注解来捕获并处理异常。这种方式实现起来比较简单,但只适用于当前 Controller。代码示例:
@RestController
public class MyController {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "出错了:" + e.getMessage();
}
@GetMapping("/test")
public String test() {
int i = 1 / 0;
return "success";
}
}
在上面的示例中,我们在 MyController
中定义了一个 handleException
方法,并使用 @ExceptionHandler
注解将这个方法和 Exception
类型的异常关联起来。当发生异常时,将自动调用 handleException
方法进行处理。
2. 自定义异常类和异常处理器
第二种全局异常处理的方式是自定义异常类和异常处理器。这种方式比起在 Controller 中捕获并处理异常,可以更加灵活地进行异常处理。下面是代码示例:
首先,我们创建一个自定义异常类 MyException
:
public class MyException extends RuntimeException {
public MyException(String message) {
super(message);
}
}
然后,在 GlobalExceptionHandler 中定义一个异常处理器:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
return "出错了:" + e.getMessage();
}
@ExceptionHandler(MyException.class)
public String handleMyException(MyException e) {
return "自定义异常:" + e.getMessage();
}
}
在上面的代码中,我们使用 @ControllerAdvice
注解将 GlobalExceptionHandler
类声明为一个异常处理器。然后,我们在该类中定义了两个异常处理方法,分别用于处理通用异常和自定义异常。
最后,我们在 Controller 中抛出异常:
@RestController
public class MyController {
@GetMapping("/test")
public String test() {
throw new MyException("测试自定义异常处理");
}
}
当 Controller 中发生异常时,将会根据异常类型调用相应的异常处理方法进行处理。
3. 配置 SimpleMappingExceptionResolver
第三种全局异常处理的方式是通过配置 SimpleMappingExceptionResolver 来实现。这种方式相对简单,只需要在配置文件中进行简单的配置即可。下面是代码示例:
首先,在 Spring 的配置文件中添加以下配置:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="error" />
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">error</prop>
<prop key="java.lang.RuntimeException">error</prop>
</props>
</property>
</bean>
在上面的配置中,我们使用 SimpleMappingExceptionResolver 类来配置全局异常处理,其中 defaultErrorView
属性指定默认的错误视图,exceptionMappings
属性指定了对不同异常进行不同的处理。
然后,在 Controller 中抛出异常:
@RestController
public class MyController {
@GetMapping("/test")
public String test() {
int i = 1 / 0;
return "success";
}
}
当 Controller 中发生异常时,将会根据异常类型进行处理并跳转到指定的错误视图。例如,在上面的示例中,发生异常时将会跳转到名为 error
的错误视图。
以上就是 SpringMVC 全局异常处理的三种方式的详细讲解和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC全局异常处理的三种方式 - Python技术站