`
zhuchengzzcc
  • 浏览: 441809 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring3中的异常处理(转)

阅读更多

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的全局异常处理

    通过本文介绍的自定义异常处理逻辑,可以有效解决Spring Cloud Gateway默认异常处理机制中存在的问题,使得异常信息更加符合业务需求。此外,这种方式也为开发者提供了一个良好的起点,可以根据具体项目需求进一步...

    详解SpringCloud Finchley Gateway 统一异常处理

    详解 SpringCloud Finchley Gateway 统一异常处理 SpringCloud Finchley Gateway 统一异常处理是指在使用 SpringCloud Finchley 版本的 Gateway 时,如何统一处理系统级异常的方法。默认情况下,SpringCloud ...

    使用Spring AOP对异常进行统一处理

    3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...

    Spring Boot统一异常处理类

    Spring Boot统一异常处理类,BaseResponse类就两个字段code和message。经测试,可以捕获所以异常,并返回指定json数据

    spring mvc异常处理

    本文将深入探讨Spring MVC中的异常处理机制,帮助你更好地理解如何优雅地处理错误和异常。 1. **Spring MVC 异常处理概述** Spring MVC 提供了一种统一的方式来处理应用程序中抛出的异常。它通过`@...

    Java异常介绍及Spring Boot统一异常处理

    Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...

    spring mvc异常简单处理

    在Spring MVC框架中,异常处理是一项关键任务,它确保了应用程序在遇到错误或异常时能够优雅地响应。本文将深入探讨Spring MVC中的异常处理机制,包括如何配置、自定义异常处理器以及异常转换策略。 首先,Spring ...

    spring mvc统一处理异常

    spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler

    Spring数据库访问之异常处理

    本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...

    spring boot 异常处理方案

    在Spring Boot应用中,异常处理是一项关键任务,它确保了程序在遇到错误时能优雅地响应,提供有意义的反馈信息,而不是返回不友好的堆栈跟踪。本项目"spring boot 异常处理方案"提供了对Spring MVC应用程序中异常...

    springboot整合thymeleaf+maven实现异常处理页面

    3. **全局异常处理** - 创建一个实现了 `ExceptionHandlerExceptionResolver` 接口的类,或者继承 `AbstractHandlerExceptionResolver`,并在其中覆盖 `resolveException` 方法来处理异常。 - 注册这个类为 Spring...

    Spring Boot 系列教程6-全局异常处理

    在Spring Boot应用中,全局异常处理是至关重要的一个部分,它确保了系统在遇到错误时能够优雅地响应,提供统一的错误信息,并且保持良好的用户体验。这篇教程将深入讲解如何在Spring Boot中实现全局异常处理。 首先...

    Spring Cloud Gateway全局异常处理的方法详解

    然而,在实际应用中,Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理。因此,本文将详细介绍Spring Cloud Gateway全局异常处理的方法。 一、Spring Cloud Gateway简介 Spring Cloud ...

    spingmvc+mybatis+统一异常处理机制

    统一异常处理会区分前端是否ajax请求,自动返回json数据格式,要求开发人员在处理ajax请求时统一封装成一个对象返回,以符合代码统一规范。 此工程在idea环境编写,导入请自己新建工程手工复制代码导入。

    Spring中切面捕获自定义异常

    Spring中,使用切面全局捕获异常的同时,进行自定义异常抛出捕获,方便代码书写。

    Springboot全局异常处理demo.zip

    Springboot全局异常处理demo 项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的...

    业务异常提示处理 springboot+Assert(自定义断言)

    在IT行业中,异常处理是系统稳定性和健壮性的重要组成部分,尤其是在使用Spring Boot进行Web开发时。本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的...

    spring mvc 事务配置+异常处理

    在Spring MVC中,事务管理是保证数据一致性和完整性的关键部分,而异常处理则有助于确保系统在遇到错误时能够优雅地恢复或者向用户反馈合适的错误信息。接下来,我们将深入探讨Spring MVC中的事务配置和异常处理。 ...

    spring boot 默认异常处理的实现

    在本文中,我们将介绍 Spring Boot 的默认异常处理机制,并通过示例代码详细介绍如何实现异常处理。 Spring Boot 的默认异常处理机制 在 Spring Boot 中,默认的异常处理机制是通过 `@ExceptionHandler` 注解来...

    实验报告1-Spring Boot自定义异常处理-资料.rar

    实验报告1-Spring Boot自定义异常处理-资料.rar 包括:项目的pom依赖,返回结果包装类Result.java,异常信息封装的枚举值ErrorEnum.java

Global site tag (gtag.js) - Google Analytics