SpringMVC异常处理

本文详细介绍了SpringMVC的异常处理机制,包括注解方式处理异常和统一异常处理。通过@ControllerAdvice和@ExceptionHandler可以实现全局异常处理,返回JSON数据。此外,文章还提到了处理特定SpringMVC异常的注解,如@ResponseStatus。

SpringMVC异常处理

SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射、数据绑定以及目标方法执行时发生的异常

SpringMVC提供的HandlerExceptionResolver的实现类包括:

实现类

DispatcherServlet默认装配的HandlerExceptionResolver有:

  • 没有使用<mvc:annotation-driven/>配置,有
    • AnnotationMethodHandlerExceptionResolver(已废弃)
    • ResponseStatusExceptionResolver
    • DefaultHandlerExceptionResolver
  • 使用了<mvc:annotation-driven/>配置,有
    • ExceptionHandlerExceptionResolver
    • ResponseStatusExceptionResolver
    • DefaultHandlerExceptionResolver

如下所示的一个方法

    /**
     * 测试异常处理
     * @return
     */
    @RequestMapping("/testExceptionHandlerExceptionResolver")
    public String testExceptionHandlerExceptionResolver(@RequestParam("i")  int i){
        System.out.println("result: " + (10 / i));
        return "success";
    }

如果url中传递的i的值为0,这会抛出异常。如http://localhost:8080/springmvc-1/springmvc/testExceptionHandlerExceptionResolver?i=0

1

如何处理异常呢?

参考:

ExceptionHandlerExceptionResolver

ExceptionHandlerExceptionResolver主要处理Handler中,用@ExceptionHandler注解定义的方法

1.@ExceptionHandler注解

可以将@ExceptionHandler添加到任何控制器中,以专门处理由同一控制器中的请求处理(@RequestMapping)方法抛出的异常

  • @ExceptionHandler方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象
  • @ExceptionHandler方法的入参不能传入Map。若希望把异常信息传导到页面上,需要使用ModalAndView作为返回值
  • @ExceptionHandler方法标记的异常有优先级的问题,例如发生的是NullPointerException,但是声明的异常有RuntimeExceptionException,此时会根据异常的最近继承关系找到继承深度最浅的那个 @ExceptionHandler注解方法,即标明了RuntimeException的方法
  • ExceptionHandlerExceptionResolver内部若找不到@ExceptionHandler注解的话,会找@ControllerAdvice中的@ExceptionHandler注解方法

如添加一个handlerArithmeticException方法,如下:

    @ExceptionHandler({ArithmeticException.class})
    public ModelAndView 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值