@Controller
public class MyController {
@RequestMapping(value = "/some.do")
public ModelAndView doSome(Integer age,String name) throws NameException {
ModelAndView mv=new ModelAndView();
if(!"zjc".equals(name)){
throw new NameException("姓名不正确");
}
mv.addObject("name",name);
mv.addObject("age",age);
mv.setViewName("show");
return mv;
}
在这段代码中如果输入的姓名不是zjc时,就会抛出异常,
而加入异常处理后,使用注解@ExceptionHandler在方法上面定义,可以将一个方法指定为异常处理方法。该注解只有一个属性 value,用于指定所要匹配的异常。
例:@ExceptionHandler(value=NameException.class)
@ExceptionHandler(value=NameException.class)
public ModelAndView doNameException(){
ModelAndView mv=new ModelAndView();
mv.setViewName("error");
return mv;
}
这时当出现异常时就会跳转到error.jsp
如果异常比较多时,这种方法就显得比较冗余了,这时我们需要定义异常处理类来包括所有异常,这时需要在定义类上用到注解@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value= NameException.class)
public ModelAndView doNameException(){
ModelAndView mv=new ModelAndView();
mv.setViewName("error");
return mv;
}
@ExceptionHandler(value= AgeException.class)
public ModelAndView doAgeException(){
ModelAndView mv=new ModelAndView();
mv.setViewName("ageError");
return mv;
}
@ControllerAdvice 是使用@Component 注解修饰的,可以使用<context:component-scan>
扫描到@ControllerAdvice 所在的类包名,还要加上注解驱动。
<context:component-scan base-package="zjc.javaweb.Handler"/>
<mvc:annotation-driven/>