SpringMVC全局异常处理器

Spring MVC全局异常处理器
 
Spring MVC提供3种统一处理异常的方法:
(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
(2)实现Spring的异常处理接口HandlerExceptionResolver

(3)使用@ExceptionHandler注解实现异常处理

一、使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

     使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver来统一管理异常,只需在springmvc.xml配置文件中添加如下配置信息:

 


        
	      
	    
	      
	      
	      
	    
	      
	      
	          
	            parameterError.jsp  
	              
	          
	      
	 
配置文件解释:
在项目中手动抛出异常throw new XXXException("自定义异常信息"),页面跳转到customError.jsp,在customError.jsp代码中获取异常信息使用ex变量(见下面jsp文件)。但是对于定义的需要特殊处理的异常,如上面的ParameterException,抛出该异常时页面跳转到parameterError.jsp,但是在parameterError.jsp代码中获取异常信息依然使用ex变量(jsp文件如下)。

 

SpringMVC全局异常处理器_第1张图片

二、实现Spring的异常处理接口HandlerExceptionResolver

步骤1、自定义异常类(CustomException.java)

 

package com.yuanlong.springmvc.common.exception;

public class CustomException extends Exception{

	/**
	 * 自定义异常类
	 * 用来捕捉系统中预期的异常,需要系统中抛出此类异常才能在此处捕捉到
	 */
	private static final long serialVersionUID = 1L;
	
	private String message;//异常提示信息

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

	public String getMessage() {
		return message;
	}

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

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

}

 

步骤2、自定义全局异常处理器(CustomExceptionResolver.java)

 

【实现HandlerExceptionResolver接口(org.springframework.web.servlet包下的),重写resolveException方法】

 

package com.yuanlong.springmvc.common.exception;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

/**
 * 自定义全局异常处理器
 * 实现HandlerExceptionResolver接口(注意是org.springframework.web.servlet包下的)
 * */
public class CustomExceptionResolver implements HandlerExceptionResolver{

	/**
	 *  重写的方法形参解释:handler就是处理器适配器执行的handler对象,ex就是系统抛出的异常
	 * */
	@Override
	public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {
		ex.printStackTrace();
		CustomException customException = null;   //初始化自定义异常类对象
		if(ex instanceof CustomException){        //判断捕获到的异常类型是否为系统自定义异常
			customException = (CustomException)ex;//同类型可以强转
		}else{
			customException = new CustomException("未知的错误!");
		}
		String message = customException.getMessage();//获取报错信息
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", message);
		modelAndView.setViewName("customError.jsp");
		return modelAndView;
	}
}

 

 

步骤3、springmvc.xml配置文件中配置全局异常处理器

 

在springmvc.xml文件中添加下面一行(注意class是"全局异常处理器"的路径,不要写成自定义异常类的路径)

 


说明:在程序任何位置(Controller层、Service层、dao层)抛出自定义异常(throw new XXXException("提示信息")),都会被全局异常处理器捕捉到,进而渲染到指定页面展示给用户。由此可见, 一个系统只有一个全局异常处理器

 

三、使用@ExceptionHandler注解实现异常处理

使用@ExceptionHandler注解方式实现,不需要编辑配置文件,直接引用注解即可。值得注意的是,在使用@ExceptionHandler注解方式实现异常处理时,抛出异常的方法和处理异常的方法要位于同一个Controller类中。

SpringMVC全局异常处理器_第2张图片

以上就是springmvc提供的3种异常统一处理的方法。

 

感兴趣的小伙伴可以关注一下博主的公众号,1W+技术人的选择,致力于原创技术干货,包含Redis、RabbitMQ、Kafka、SpringBoot、SpringCloud、ELK等热门技术的学习&资料。

SpringMVC全局异常处理器_第3张图片

 

你可能感兴趣的:(SpringMVC,spring,mvc,异常,异常处理)