SpringMVC异常处理注解方式(3)

方式一

步骤一:创建异常类

public class GyException extends Exception {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String exception;
	public GyException() {}
	public GyException(String exception) {
		super(exception);
		this.exception =exception;
	}
	public String getException() {
		return exception;
	}
	public void setException(String exception) {
		this.exception = exception;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	@Override
	public String toString() {
		return "GyException [exception=" + exception+" ]";
	}
	

}

步骤二: 创建顶层异常处理类

public class BaseExceptionController {
	@ExceptionHandler
	 public ModelAndView resolveException(Exception ex) {
        ModelAndView mv = new ModelAndView();
        System.out.println("i am com in 1");
        mv.setViewName("custom_error");
        if (ex instanceof GyException) {
        	ex = (GyException)ex;
        	mv.addObject("message", ex.getMessage());
        	System.out.println("i am com in 2");
            mv.setViewName("custom_error");
        } else if (ex instanceof RuntimeException) {
        	System.out.println("i am com in 3");
            mv.setViewName("custom_error");
        }
        return mv;
    }
}
步骤三:需要处理异常的controller类,集成基类异常处理类

public class UserController extends BaseExceptionController {
	
	@RequestMapping(value="login")
	public String login(HttpServletRequest request,HttpServletResponse response) {
		
      return "register";
	}
	
	@RequestMapping(value="add")
	public void add(HttpServletRequest request,HttpServletResponse response,User user) {
		
	    AddUser adduser =new AddUser();
	    adduser.addUser(user);
	}
	@RequestMapping(value="exception")
	public String ecxeption(HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse ,User user) throws Exception {
	    if(user.getUserName()==null) {
	    	System.out.println("用户名不能为空");
				 throw new GyException("用户名不能为空");
	    	
	    }
	    return "custom_error";
    }

}
@Exception中可以指定该方法处理哪一类异常及其子类。例如:@Exception(value=“value=GyException.class”)value的值值及时处理
该方法处理的具体异常类型。也可以指定多个方法并指定处理指定的特定异常。
如果单独使用@ExceptionHandle,只能在当前controller中处理异常

方式二:@Controller+@ExceptionHandler配合使用完成全局异常捕获

注意:@controller注释的类必须被Spring扫描到注册到spring容器中才能生效。

@ControllerAdvice是一个@Component,用于定义@ExceptionHandler@InitBinder@ModelAttribute方法,适用于所有使用@RequestMapping方法

第一步:检查@ControllerAdvice注解的类是否被扫描到

    <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
    <context:component-scan base-package="com.test.validator" />
第二步写异常处理类
@ControllerAdvice
public class BaseExceptionController {
	@ExceptionHandler(value=Exception.class)
	 public ModelAndView resolveException(Exception ex) {
        ModelAndView mv = new ModelAndView();
        System.out.println("diao yong de shi me ");
        mv.setViewName("custom_error");
        if (ex instanceof GyException) {
        	ex = (GyException)ex;
        	mv.addObject("message", ex.getMessage());
        	System.out.println("i am com in 2");
            mv.setViewName("custom_error");
        } else if (ex instanceof RuntimeException) {
        	System.out.println("i am com in 3");
            mv.setViewName("custom_error");
        }
        return mv;
    }
//这里的GyExceptionOne和GyException是 不同类型的自定义异常
 @ExceptionHandler(value=GyExceptionOne.class)
public ModelAndView resolveException1(Exception ex) { ModelAndView mv = new ModelAndView(); System.out.println("diao yong de shi wo ao ao"); mv.setViewName("custom_error"); if (ex instanceof GyExceptionOne) { ex = (GyExceptionOne)ex; mv.addObject("message", ex.getMessage()); System.out.println("i am com in 2"); mv.setViewName("custom_error"); } else if (ex instanceof RuntimeException) { System.out.println("i am com in 3"); mv.setViewName("custom_error"); } return mv; }}

第三步:产生异常

@RequestMapping(value="exception")
    public String ecxeption(HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse ,User user) throws Exception {
        if(user.getUserName()==null) {
            System.out.println("用户名不能为空");
                 throw new GyException("用户名不能为空");
        }
        return "custom_error";
    }
第四步:在JSP页面对异常进行展示







猜你喜欢

转载自blog.csdn.net/yaoyaowudi123/article/details/80095475