Spring MVC(七) 异常处理

admin2024-05-15  0

        在实际的开发中,不管做什么操作,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。如果能够做到统一的处理,将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。Spring MVC就提供了一套异常处理机制。

        Spring MVC的异常处理有多种方式,常用的有基于注解@ExceptionHandler,基于异常处理器SimpleMappingExceptionResolver。

        首先自定义一个异常类SpringException,继承RumtimeException类,并实现其四个构造方法,代码略。

        然后在控制器中编写方法,并为方法加入注解@ExceptionHandler,代码如下。

@ExceptionHandler(value={SpringException.class})
public String handlerException(SpringException e, Model model) {
	model.addAttribute("e", e);
	return "error";
}

        注解中参数value的值使用的是一个数组,也就是说其中可以同时处理多个异常。此时如果该控制器中的任何操作发生了SpringException异常,都会被该方法捕获,进而做统一的处理。在返回的视图页面中只需要使用EL表达式${e.message },就可以显示异常信息。

        但是这种操作只能处理一个控制器中的相关异常信息,是一种局部的操作,如果想要实现全局的异常处理操作,可以创建一个异常处理类,通过注解@ControllerAdvice就可以实现全局的异常处理了,代码如下。

@ControllerAdvice
public class SpringExceptionHandler {
	@ExceptionHandler(value={SpringException.class})
	public String handlerException(SpringException e, Model model) {
		model.addAttribute("e", e);
		return "error";
	}
}

        Spring MVC还提供了一种全局异常的处理方式,就是基于异常处理器SimpleMappingExceptionResolver的异常处理。具体操作是,只需要在Spring MVC的配置文件中添加配置即可,具体代码如下。

<!-- 全局异常处理 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<prop key="com.tuwei.exception.SpringException">error</prop>
		</props>
	</property>
</bean>

        其中的<property>标签中的name属性值“exceptionMappings”,其实是SimpleMappingExceptionResolver类中的一个属性。此时返回的错误页面也是error.jsp,在页面中显示错误信息,应该使用EL表达式${exception.message }。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!