Spring MVC(七) 异常处理

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

相关推荐

  1. SpringMVC异常处理

    2024-05-16 07:34:06       40 阅读
  2. SpringMVC异常处理

    2024-05-16 07:34:06       18 阅读
  3. Spring MVC() 异常处理

    2024-05-16 07:34:06       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 07:34:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 07:34:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 07:34:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 07:34:06       20 阅读

热门阅读

  1. Oracle数据块之数据行中的SCN

    2024-05-16 07:34:06       11 阅读
  2. 【专用】C# ArrayList的用法总结

    2024-05-16 07:34:06       9 阅读
  3. 【FFmpeg】编码链路上主要函数的简单分析

    2024-05-16 07:34:06       15 阅读
  4. Linux文件处理知识点

    2024-05-16 07:34:06       11 阅读
  5. 24.HashMap的扩容机制

    2024-05-16 07:34:06       13 阅读
  6. uni-app 实现下拉单选功能(六)

    2024-05-16 07:34:06       11 阅读
  7. 【kotlin其它】Gson的简单用法

    2024-05-16 07:34:06       13 阅读
  8. Mac M1安装 nacos并自定义 Mysql 数据

    2024-05-16 07:34:06       9 阅读