java培训异常处理之ExceptionHandlerExceptionResolver

  • 主要处理 Handler 中用 @ExceptionHandler 注解定义的方法。
  • @ExceptionHandler 注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有 RuntimeException 和 Exception,此候会根据异常的最近继承关系找到继承深度最浅的那个 @ExceptionHandler 注解方法,即标记了 RuntimeException 的方法
  • ExceptionHandlerMethodResolver 内部若找不到@ExceptionHandler 注解的话,会找 @ControllerAdvice 中的@ExceptionHandler 注解方法

  1 实验代码

  • 页面链接

<a href=”testExceptionHandlerExceptionResolver?i=1″>testExceptionHandlerExceptionResolver</a>

  • 控制器方法

package com.atguigu.springmvc.crud.handlers;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

 

@Controller

public class ExceptionHandler {

@RequestMapping(“/testExceptionHandlerExceptionResolver”)

public String testExceptionHandlerExceptionResolver(@RequestParam(“i”) int i){

System.out.println(“10/”+i+”=”+(10/i));

return “success”;

}

}

  • 测试,出现异常情况

Java培训

处理异常,跳转到error.jsp

  • 在控制器中增加处理异常的方法

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public String handleException(Exception ex){

System.out.println(“出现异常啦L”+ex);

return “error“;

}

  • 增加jsp

<h3>Error Page</h3>

  2 如何将异常对象从控制器携带给页面,做异常信息的获取

  • 异常对象不能通过Map集合方式传递给成功页面。(Map不可以)

// @ExceptionHandler(value={java.lang.ArithmeticException.class})

public String handleException(Exception ex,Map<String,Object> map){

System.out.println(“出现异常啦:”+ex);

map.put(“exception”,ex);

return “error”;

}

java培训

  • 可以通过ModelAndView将异常对象传递给成功页面上

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public ModelAndView handleException(Exception ex){

System.out.println(“出现异常啦:”+ex);

ModelAndView mv = new ModelAndView(“error”);

mv.addObject(“exception“, ex);

return mv;

}

       13.3.3匹配异常类型,执行顺序问题

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public ModelAndView handleException(Exception ex){

System.out.println(“出现异常啦:”+ex);

ModelAndView mv = new ModelAndView(“error”);

mv.addObject(“exception“, ex);

return mv;

}

 

@ExceptionHandler(value={java.lang.RuntimeException.class})

public ModelAndView handleException2(Exception ex){

System.out.println(“RuntimeException-出现异常啦:”+ex);

ModelAndView mv = new ModelAndView(“error”);

mv.addObject(“exception“, ex);

return mv;

}

       13.3.4 公共的处理异常的类@ControllerAdvice

  • 定义公共的处理异常的类

package com.atguigu.springmvc.exceptionAdvice;

 

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.servlet.ModelAndView;

 

@ControllerAdvice

public class ExceptionAdviceHandler {

 

/*        

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public ModelAndView handleException(Exception ex){

 

System.out.println(“出现异常啦:”+ex);

ModelAndView mv = new ModelAndView(“error”);

mv.addObject(“exception”, ex);

 

return mv; 

}*/

 

@ExceptionHandler(value={java.lang.RuntimeException.class})

public ModelAndView handleException2(Exception ex){

 

System.out.println(“RuntimeException-出现异常啦:”+ex);

ModelAndView mv = new ModelAndView(“error”);

mv.addObject(“exception”, ex); //error.jsp   -> ${requestScope.exception}

 

return mv;

}

}


上一篇:
下一篇: