如何优雅的捕获所有Controller对象handler⽅法抛出的异常

在SpringMVC中提供了一种优雅的方式捕获Handler方法抛出的异常。接下来就看看是如何实现的。

方式一:在controller类型定义一个方法处理异常

  • 在controller中定义一个方法,在方法上增加@ExceptionHandler(ArithmeticException.class)可以捕获具体的异常或者指定异常的子类异常
@ExceptionHandler(ArithmeticException.class)
    public void handleException(ArithmeticException arithmeticException, HttpServletResponse response) throws IOException {
        response.getWriter().write(arithmeticException.getMessage());
    }

捕获异常后的处理方式:

  • 将异常返回到界面
  • 直接返回到一个error界面
  • 或者直接输出到response中
    这种方式只针对当前controller有效,其他controller中的异常是无法捕获的。

方式二:定义一个共同异常处理类

@ControllerAdvice
public class ExceptionHandlerClass {

    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception exception){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg",exception.getMessage());
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

这个异常处理类必须是能被Spring容器扫描到的,注册到Spring容器中,才能起作用。
扫描组件配置:

<context:component-scan base-package="com.fuyf.stu.exception.handler"></context:component-scan>

这样就可以将所有的异常处理放在一个类中,进行统一管理了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Controller捕获异常并将其抛出,可以使用异常处理器(Exception Handler)来处理。在Spring框架中,可以通过自定义实现`@ControllerAdvice`注解的类来实现全局异常处理。 首先,创建一个用于处理异常的类,并使用`@ControllerAdvice`注解进行标记。在该类中,可以定义多个`@ExceptionHandler`方来处理不同类型的异常。例如: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception ex) { // 处理异常逻辑 // 可以根据具体的异常类型进行不同的处理 // 返回适当的响应 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error"); } @ExceptionHandler(NotFoundException.class) public ResponseEntity<String> handleNotFoundException(NotFoundException ex) { // 处理NotFoundException异常逻辑 // 返回适当的响应 return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Not Found"); } // 其他自定义异常的处理方... } ``` 在上述代码中,`handleException`方用于处理通用的异常,而`handleNotFoundException`方用于处理自定义的NotFoundException异常。根据具体的业务需求,可以添加更多的异常处理方。 当Controller层发生异常时,会被全局异常处理器捕获并调用相应的处理方。处理方可根据具体需求进行异常处理,并返回合适的响应。 需要注意的是,在Controller层使用try-catch块来捕获异常抛出是一种常见的做,但在实际开发中,使用全局异常处理器能更好地统一处理异常,提高代码的可维护性和可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值