springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

 

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的daoservicecontroller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

 

自定义异常类

为了区别不同的异常,通常根据异常类型进行区分,这里我们创建一个自定义系统异常。

如果controllerservicedao抛出此类异常说明是系统预期处理的异常信息。

 

public class MyException extends Exception{
    private String message;

    public MyException() {
        super();
        // TODO Auto-generated constructor stub
    }

    public MyException(String message) {
        super();
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

 

自定义异常处理器

public class CustomHandleException implements HandlerExceptionResolver{

	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object object,
			Exception exception) {
		
		String msg;
		
		//判断异常类型
		if(exception instanceof MyException) {
			// 如果是自定义异常,读取异常信息
			msg = exception.getMessage();
		}else {
			// 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
			Writer out = new StringWriter();
			PrintWriter pw = new PrintWriter(out);
			exception.printStackTrace(pw);
			msg = out.toString();
		}

          //返回错误的页面 ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("msg", msg); modelAndView.setViewName("error"); return modelAndView; } }

配置异常处理器

<!-- 配置全局异常处理器 -->
<bean id="customHandleException" class="com.exception.CustomHandleException"></bean>

错误页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <h1>系统发生异常了!</h1>
    <br />
    <h1>异常信息</h1>
    <br />
    <h2>${msg }</h2>

</body>
</html>

测试方法

@RequestMapping(value="exception")
    public ModelAndView exception() throws Exception{
        // 自定义异常
        if (true) {
            throw new MyException("自定义异常出现了~");
        }
        ModelAndView mav = new ModelAndView();
        mav.setViewName("error");
        return mav;
    }
    

 

版权声明:本文为sangewuxie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sangewuxie/p/9220636.html