在 Spring MVC 中,异常处理是一个非常重要的方面,它可以帮助开发者更好地管理应用程序中的错误情况

本文深入探讨了SpringBoot和SpringMVC框架下多种异常处理方法,包括局部、控制器级和全局处理策略,以及如何利用SpringBoot的默认错误页面和自定义错误响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Exception Handling in Spring MVC

在 Spring MVC 中,异常处理是一个非常重要的方面,它可以帮助开发者更好地管理应用程序中的错误情况,提供友好的用户反馈,并确保应用程序的稳定性和可维护性。Spring MVC 提供了多种方式来处理异常,包括使用 @ExceptionHandler 注解、HandlerExceptionResolver 接口以及全局异常处理。

1. 使用 @ExceptionHandler 注解

@ExceptionHandler 注解可以用于方法级别,用于处理特定类型的异常。这些方法可以定义在控制器类中,也可以定义在全局异常处理器类中。

示例:在控制器中处理异常
@Controller
public class UserController {
   
   

    @GetMapping("/user")
    public String getUser(@RequestParam("id") Long id, Model model) {
   
   
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
   
   
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

在这个示例中,handleUserNotFoundException 方法会捕获 UserNotFoundException 异常,并返回一个 HTTP 404 响应。

示例:全局异常处理器

你也可以创建一个全局异常处理器类,用于处理所有控制器中的异常。

@ControllerAdvice
public class GlobalExceptionHandler {
   
   

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException ex) {
   
   
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleGeneralException(Exception ex) {
   
   
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred: " + ex.getMessage());
    }
}

在这个示例中,GlobalExceptionHandler 类使用了 @ControllerAdvice 注解,表示它是一个全局异常处理器。它定义了两个异常处理方法,分别处理 UserNotFoundException 和其他所有异常。

2. 使用 HandlerExceptionResolver 接口

HandlerExceptionResolver 接口提供了另一种方式来处理异常。你可以实现这个接口,定义自己的异常处理逻辑。

示例:自定义 HandlerExceptionResolver
@Component
public class CustomExceptionResolver implements HandlerExceptionResolver {
   
   

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bol5261

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值