SpringMVC处理异常的四种方式
@Controller
public class MyException {
@RequestMapping("exception1")
public String exception1(){
//写出个异常
int i = 8 / 0;
return "success";
}
/**
* @ExceptionHandler:属性value是数组,里面写异常的全路径的字节码对象
* @param e 接收异常的类型
* @return 返回值类型必须是ModelAndView
*/
@ExceptionHandler(value = {java.lang.ArithmeticException.class,java.lang.NullPointerException.class})
public ModelAndView hadlerExecption(Exception e){ //返回值类型必须是ModelAndView
System.out.println(e);
ModelAndView mv = new ModelAndView();
mv.addObject("msg",e); //携带错误信息跳转页面
mv.setViewName("error");
return mv;
}
}
2.使用@ControllerAdvice+@ExceptionHandler注解进行全局异常的处理
@Controller
public class MyException {
@RequestMapping("exception1")
public String exception1(){
//写出个异常
int i = 8 / 0;
return "success";
}
}
写一个全局异常处理的类,使用@ControllerAdvice+@ExceptionHandler注解(注意:改类一定要被springmvc扫描,否则不管用)
@ControllerAdvice
public class GloableException {
/**
* @ExceptionHandler:属性value是数组,里面写异常的全路径的字节码对象
* @param e 接收异常的类型
* @return 返回值类型必须是ModelAndView
*/
@ExceptionHandler(value = {java.lang.ArithmeticException.class,java.lang.NullPointerException.class})
public ModelAndView hadlerExecption(Exception e){ //返回值类型必须是ModelAndView
System.out.println(e);
ModelAndView mv = new ModelAndView();
mv.addObject("msg",e); //携带错误信息跳转页面
mv.setViewName("error");
return mv;
}
}
3.使用SimpleMappingExceptionResolver,该方法不能携带数据
@Controller
public class MyException {
@RequestMapping("exception1")
public String exception1(){
//写出个异常
int i = 8 / 0;
return "success";
}
}
-
使用xml的方式,在springmvc文件中进行配置
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!--key是异常的全类名,error是要跳转的页面--> <prop key="java.lang.ArithmeticException">error</prop> <prop key="java.lang.NullPointerException">error</prop> </props> </property> </bean>
-
使用@Configuration注解进行配置类的方法,跟上面的xml文件作用一样,就是换了个写法
@Configuration //该注解就是把本类作为一个xml文件 public class GloableException2 { @Bean //该注解是把改方法的返回值放到容器当中,相当于xml文件的bean标签 public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){ SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver(); Properties prop = new Properties(); prop.put("java.lang.NullPointerException","error"); prop.put("java.lang.ArithmeticException","error"); resolver.setExceptionMappings(prop); return resolver; } }
4.自定义的HandlerExceptionResolve
@Controller
public class MyException {
@RequestMapping("exception1")
public String exception1(){
//写出个异常
int i = 8 / 0;
return "success";
}
}
@Configuration
public class GloableException3 implements HandlerExceptionResolver {
/**
* @param e :异常的类型
* @return
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
if(e instanceof NullPointerException){
mv.setViewName("error");
}
if(e instanceof ArithmeticException){
mv.setViewName("error");
}
mv.addObject("msg",e);
return mv;
}
}