Spring3.0中对异常的处理方法一共提供了两种:一种是使用HandlerExceptionResolver接口;一种是在Controller类内部使用@ExceptionHandler注解。
使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver;
使用第二种方式可以在Controller内部实现更个性化点异常处理方式,灵活性更高。
一般来说,项目中只需要采用第一种方式就可以了,每个人都自己定义异常的展现方式,太过个性了,不统一。
从目前的调查结果看,这两种方式不能共存,不知道未来的版本是否能将他们合二为一,这样才能灵活配置。
一、基于HandlerExceptionResolver接口的异常处理:
使用这种方式只需要实现resolveException方法,该方法返回一个ModelAndView对象,在方法内部对异常的类型进行判断,然后常见合适的ModelAndView对象,如果该方法返回了null,则Spring会继续寻找其他的实现了HandlerExceptionResolver接口的Bean。换句话说,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回了一个ModelAndView对象。
示例代码:
/**
* * 基于HandlerExceptionResolver接口的异常处理类 *
* @author ZYWANG 2011-4-2
*/
public class CustomExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception exception) {
if (exception instanceof IOException) {
return new ModelAndView("ioexp");
} else if (exception instanceof SQLException) {
return new ModelAndView("sqlexp");
}
return null;
}
}
这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签,也可以使用<bean/>节点。为了简单的进行异常处理,Spring提供了SimpleMappingExceptionResolver类,该类实现了HandlerExceptionResolver接口,需要使用时只需要使用<bean/>节点进行声明即可,示例如下:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 -->
<property name="exceptionMappings">
<props>
<prop key="IOException">error/ioexp</prop>
<prop key="java.sql.SQLException">error/sqlexp</prop>
</props>
</property>
</bean>
二、基于@ExceptionHandler的异常处理:
该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和@RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误。
示例代码:
/**
* * 基于@ExceptionHandler异常处理 *
* @author ZYWANG 2011-4-2
*/
@Controller
public class ExceptionHandlerController {
@ExceptionHandler(value = { IOException.class, SQLException.class })
public String exp(Exception ex, HttpServletRequest request) {
request.setAttribute("ex", ex);
return "/error.jsp";
}
}
分享到:
相关推荐
通过本文介绍的自定义异常处理逻辑,可以有效解决Spring Cloud Gateway默认异常处理机制中存在的问题,使得异常信息更加符合业务需求。此外,这种方式也为开发者提供了一个良好的起点,可以根据具体项目需求进一步...
3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...
详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...
Spring Boot统一异常处理类,BaseResponse类就两个字段code和message。经测试,可以捕获所以异常,并返回指定json数据
本文将深入探讨Spring MVC中的异常处理机制,帮助你更好地理解如何优雅地处理错误和异常。 1. **Spring MVC 异常处理概述** Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@...
Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...
在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够优雅地响应。本文将深入探讨Spring MVC中的异常处理机制,包括如何配置、自定义异常处理器以及异常转换策略。 首先,Spring ...
spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler
本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...
内容概要:本文详细介绍了Spring Boot的异常处理机制,包括Java标准异常、Spring框架异常和自定义异常的处理方式。文章讲解了如何创建自定义异常类,配置全局异常处理器,并通过@ControllerAdvice和@...
Spring Boot 全局异常处理整理
在Spring Boot应用中,异常处理是一项关键任务,它确保了程序在遇到错误时能优雅地响应,提供有意义的反馈信息,而不是返回不友好的堆栈跟踪。本项目"spring boot 异常处理方案"提供了对Spring MVC应用程序中异常...
然而,在实际应用中,Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理。因此,本文将详细介绍Spring Cloud Gateway全局异常处理的方法。 一、Spring Cloud Gateway简介 Spring Cloud ...
3. **全局异常处理** - 创建一个实现了 `ExceptionHandlerExceptionResolver` 接口的类,或者继承 `AbstractHandlerExceptionResolver`,并在其中覆盖 `resolveException` 方法来处理异常。 - 注册这个类为 Spring...
在Spring Boot应用中,全局异常处理是至关重要的一个部分,它确保了系统在遇到错误时能够优雅地响应,提供统一的错误信息,并且保持良好的用户体验。这篇教程将深入讲解如何在Spring Boot中实现全局异常处理。 首先...
统一异常处理会区分前端是否ajax请求,自动返回json数据格式,要求开发人员在处理ajax请求时统一封装成一个对象返回,以符合代码统一规范。 此工程在idea环境编写,导入请自己新建工程手工复制代码导入。
Spring中,使用切面全局捕获异常的同时,进行自定义异常抛出捕获,方便代码书写。
Springboot全局异常处理demo 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的...
在Spring MVC中,事务管理是保证数据一致性和完整性的关键部分,而异常处理则有助于确保系统在遇到错误时能够优雅地恢复或者向用户反馈合适的错误信息。接下来,我们将深入探讨Spring MVC中的事务配置和异常处理。 ...