Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
发布人:shili8
发布时间:2025-01-02 08:20
阅读次数:0
**Spring MVC 异常处理**
在 Spring MVC 中,异常处理是非常重要的功能之一。它可以帮助我们捕捉和处理程序中的异常,使得我们的应用更加健壮和可靠。在本文中,我们将讨论如何使用 Spring MVC 来实现异常处理。
### 单个控制器异常处理器首先,让我们来看一下单个控制器异常处理器的例子。假设我们有一个名为 `UserController` 的控制器,它负责管理用户信息。
java// UserController.java@RestController@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
// Simulate an exception if (id ==1L) {
throw new RuntimeException("User not found");
}
return new User(id, "John Doe",30);
}
}
在上面的例子中,我们定义了一个 `getUser` 方法,它负责从数据库中获取用户信息。如果 ID 为1,会抛出一个 `RuntimeException`。但是,这个异常并没有被捕捉和处理。
要捕捉这个异常,我们需要在控制器类中添加一个异常处理器:
java// UserController.java (续) @ExceptionHandler(RuntimeException.class) public ResponseEntityhandleRuntimeException(RuntimeException e) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User not found"); }
在上面的例子中,我们定义了一个 `handleRuntimeException` 方法,它负责捕捉 `RuntimeException` 并返回一个 HTTP404 响应。
### 全局异常处理器除了单个控制器异常处理器之外,我们还可以定义全局异常处理器。全局异常处理器负责捕捉所有未被捕捉的异常,并返回一个标准化响应。
要定义全局异常处理器,我们需要在 Spring MVC 配置类中添加一个 `@ExceptionHandler` 注解:
java// WebConfig.java@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {
@Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enabled(true);
}
@Bean public ExceptionHandlerExceptionResolver exceptionResolver() {
return new ExceptionHandlerExceptionResolver();
}
}
在上面的例子中,我们定义了一个 `exceptionResolver` 方法,它负责返回一个全局异常处理器。
要捕捉所有未被捕捉的异常,我们需要定义一个全局异常处理器:
java// GlobalExceptionHandler.java@Componentpublic class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@Override protected void handleException(HttpServletRequest request, HttpServletResponse response, Exception ex) {
// Simulate a custom error message String errorMessage = "An unexpected error occurred";
if (ex instanceof RuntimeException) {
errorMessage = "A runtime exception occurred";
}
try {
response.getWriter().write(errorMessage);
} catch (IOException e) {
// Ignore }
}
}
在上面的例子中,我们定义了一个全局异常处理器,它负责捕捉所有未被捕捉的异常,并返回一个标准化响应。
### 自定义异常处理器除了单个控制器异常处理器和全局异常处理器之外,我们还可以定义自定义异常处理器。自定义异常处理器负责捕捉特定类型的异常,并返回一个标准化响应。
要定义自定义异常处理器,我们需要在 Spring MVC 配置类中添加一个 `@ExceptionHandler` 注解:
java// CustomExceptionHandler.java@Componentpublic class CustomExceptionHandler {
@ExceptionHandler(MyCustomException.class)
public ResponseEntity handleMyCustomException(MyCustomException e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid request");
}
}
在上面的例子中,我们定义了一个自定义异常处理器,它负责捕捉 `MyCustomException` 异常,并返回一个 HTTP400 响应。
### 总结在本文中,我们讨论了 Spring MVC 中的异常处理。我们看到了单个控制器异常处理器、全局异常处理器和自定义异常处理器的例子。这些例子展示了如何捕捉和处理程序中的异常,使得我们的应用更加健壮和可靠。
通过阅读本文,希望你能够理解 Spring MVC 中异常处理的重要性,并能够在自己的项目中应用这些知识。

