java mvc异常捕获异常_【SpringMVC】异常处理ExceptionHandlerExceptionResolver

注意几个细节:

1.       如何将异常信息返回到页面上呢?

尝试将异常信息装入map,再次请求

发现,异常处理方法不好使了

2.       在@ExceptionHandler注解的方法入参中可以加入Exception类型的参数,该参数即对应发生的异常对象

3.       @ExceptionHandler方法的入参中不能传入map,若希望把异常信息传到页面上,需要使用ModelAndView作为返回值

改造处理:

error.jsp中加入spel表达式:

${exception}

控制器:

@ExceptionHandler({ArithmeticException.class})

public

ModelAndView handleArithmeticException(Exception

ex){

System.out.println(“出异常了:“+ex);

ModelAndView mv=new ModelAndView(“error”);

mv.addObject(“exception”,ex);

return

mv;

}

4.  @ExceptionHandler标记的方法优先级问题

在controller中写了两个处理异常的方法,当发生异常时,优先被和异常最近的方法处理

@ExceptionHandler({RuntimeException.class})

public ModelAndView handleArithmeticException2(Exception

ex){

System.out.println(“[出异常了]:“+ex);

ModelAndView mv=new ModelAndView(“error”);

mv.addObject(“exception”,ex);

return

mv;

}

@ExceptionHandler({ArithmeticException.class})

public ModelAndView handleArithmeticException(Exception

ex){

System.out.println(“出异常了:“+ex);

ModelAndView mv=new ModelAndView(“error”);

mv.addObject(“exception”,ex);

return

mv;

}

5.       以上处理的都是一个局部handler的异常,如何配置全局的呢?

将控制器中的异常处理方法全部注释掉,这样就在当前的Handler中找不到@ExceptionHandler标记的可处理异常的方法,那么就去@ControllerAdvice

标记的类中找@ExceptionHandler标记的方法来处理异常

例如:新建一个类,在类中写上异常处理方法

用@ControllerAdvice标记类,注册到spring容器中

@ControllerAdvice

public

class HandlerException {

@ExceptionHandler({ArithmeticException.class})

public ModelAndView handleArithmeticException(Exception

ex){

System.out.println(“—->出异常了:“+ex);

ModelAndView mv=new ModelAndView(“error”);

mv.addObject(“exception”,ex);

return

mv;

}

}

结果:加入控制器增强处理后,可以处理controller中抛出的异常了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值