`

spring mvc controller 异常处理

 
阅读更多

Spring3.0中对异常的处理方法一共提供了两种:

  • 一种是使用HandlerExceptionResolver接口;
  • 一种是在Controller类内部使用@ExceptionHandler注解。

 

使用第一种方式可以实现全局异常控制,并且Spring已经提供了一个默认的实现类SimpleMappingExceptionResolver

使用第二种方式可以在Controller内部实现更个性化点异常处理方式,灵活性更高。一般来说,项目中只需要采用第一种方式就可以了,每个人都自己定义异常的展现方式,太过个性了,不统一。

 

从目前的调查结果看,这两种方式不能共存,不知道未来的版本是否能将他们合二为一,这样才能灵活配置。

基于HandlerExceptionResolver接口的异常处理:

使用这种方式只需要实现resolveException方法,该方法返回一个ModelAndView对象,在方法内部对异常的类型进行判断,然后常见合适的ModelAndView对象,如果该方法返回了null,则Spring会继续寻找其他的实现了HandlerExceptionResolver接口的Bean。换句话说,Spring会搜索所有注册在其环境中的实现了HandlerExceptionResolver接口的Bean,逐个执行,直到返回了一个ModelAndView对象。

示例代码:

Java代码  收藏代码
  1. /** 
  2.  * 基于HandlerExceptionResolver接口的异常处理类 
  3.  * @author 2011-4-2 
  4.  */  
  5. public class CustomExceptionHandler implements HandlerExceptionResolver {  
  6.   
  7.     @Override  
  8.     public ModelAndView resolveException(HttpServletRequest request,  
  9.             HttpServletResponse response, Object object, Exception exception) {  
  10.         if(exception instanceof IOException){  
  11.             return new ModelAndView("ioexp");  
  12.         }else if(exception instanceof SQLException){  
  13.             return new ModelAndView("sqlexp");  
  14.         }  
  15.         return null;  
  16.     }  
  17.   
  18. }  

这个类必须声明到Spring中去,让Spring管理它,你可以使用@Component标签,也可以使用<bean/>节点。为了简单的进行异常处理,Spring提供了SimpleMappingExceptionResolver类,该类实现了HandlerExceptionResolver接口,需要使用时只需要使用<bean/>节点进行声明即可,示例如下:

Xml代码  收藏代码
  1. <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
  2.     <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->  
  3.     <property name="defaultErrorView" value="error"></property>  
  4.     <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->  
  5.     <property name="exceptionAttribute" value="ex"></property>  
  6.     <!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值 -->  
  7.     <property name="exceptionMappings">  
  8.         <props>  
  9.             <prop key="IOException">error/ioexp</prop>  
  10.             <prop key="java.sql.SQLException">error/sqlexp</prop>  
  11.         </props>  
  12.     </property>  
  13. </bean>  

基于@ExceptionHandler的异常处理:

该方法需要定义在Controller内部,然后创建一个方法并用@ExceptionHandler注解来修饰用来处理异常,这个方法基本和@RequestMapping修饰的方法差不多,只是可以多一个类型为Exception的参数,@ExceptionHandler中可以添加一个或多个异常的类型,如果为空的话则认为可以触发所有的异常类型错误。

示例代码:

Java代码  收藏代码
  1. /** 
  2.  * 基于@ExceptionHandler异常处理 
  3.  * @author 
  4.  */  
  5. @Controller  
  6. public class ExceptionHandlerController {  
  7.       
  8.     @ExceptionHandler(value={IOException.class,SQLException.class})  
  9.     public String exp(Exception ex,HttpServletRequest request) {  
  10.         request.setAttribute("ex", ex);  
  11.         return "/error.jsp";  
  12.     }  
  13.   
  14. }  

 

以上配置基于Spring3.05进行设置,参考其《Reference Documentation》

分享到:
评论

相关推荐

    spring mvc异常简单处理

    确保正确配置这些依赖,是构建一个能够正常处理异常的Spring MVC项目的基础。 在`src`目录下,可能包含了Java源代码、配置文件等。通常,异常处理相关的类会放在`com.example.yourpackage.controller.advice`这样的...

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    在Spring MVC框架中,AOP...通过这种方式,我们可以轻松地在Spring MVC Controller层实现日志管理,无需在每个方法中手动插入日志代码。这种解耦使得代码更易于维护,同时提供了全面的日志信息,有助于调试和性能分析。

    Spring MVC Controller配置方式

    在 Spring MVC 中,Controller 是处理用户请求的核心组件,负责接收请求、处理业务逻辑并返回响应。本文将详细介绍 Spring MVC 中 Controller 的配置方式。 一、注解式配置 1.1 @Controller 注解 @Controller 是 ...

    spring mvc controller间跳转 重定向 传参

    Spring MVC controller 间跳转重定向传参 在 Spring MVC 框架中,controller 间跳转重定向传参是一个非常常见的需求。这里,我们将讨论三种常见的情况:不带参数跳转、带参数拼接 URL 形式跳转、带参数不拼接参数...

    Spring MVC jar包

    - **ModelAndView**:Controller处理完请求后,返回一个ModelAndView对象,包含了模型数据和视图信息。 - **注解驱动开发**:2.5.6版本已经支持注解驱动,如@Controller、@RequestMapping、@RequestParam等,使得...

    最全最经典spring-mvc教程

    错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...

    Spring MVC 4.2.3

    9. **异步处理支持**:Spring MVC支持异步处理请求,允许在不阻塞线程的情况下执行耗时的操作,从而提高系统性能。 10. **国际化和本地化**:通过消息源和LocaleResolver,Spring MVC可以轻松实现应用的多语言支持...

    Spring MVC 教程快速入门 深入分析

    十一、Spring MVC如何实现全局的异常处理:提供了实现全局异常处理器的方式,让开发者能够捕获所有控制器抛出的异常,统一处理。 十二、Spring MVC如何把全局异常记录到日志中:讲述了如何将异常信息记录到日志文件...

    spring MVC junit 单元测试(controller)

    在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...

    spring mvc 4.0

    11. **错误处理**:通过@ControllerAdvice和@ExceptionHandler,可以全局处理异常,提供统一的错误页面或API响应。 12. **整合WebSocket**:Spring MVC 4.0开始支持WebSocket协议,允许实现实时通信,如聊天应用、...

    Spring mvc5.0.3 所有jar包

    3. **@Controller注解**: 用于标记一个类作为Spring MVC的Controller,其中的方法通常处理HTTP请求。例如,`@RequestMapping`注解用于映射HTTP请求到特定的方法。 4. **ModelAndView对象**: 这是Spring MVC中用于...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    7. ** ModelAndView**:这个类是用来存储模型数据和视图信息的,Controller处理完请求后,会返回一个ModelAndView对象,其中包含了要展示的数据和要跳转的视图名称。 8. **视图解析器(ViewResolver)**:它负责根据...

    Spring mvc 教程

    - **处理一般的 Spring MVC 异常**:Spring MVC 自身的一些异常可以在这里统一处理。 - **使用 @ResponseStatus 注解业务异常**:为自定义异常添加 HTTP 状态码。 #### Servlet 默认容器错误页面的定制化 - **Web ...

    Mastering Spring MVC 4(2015.09)源码

    控制器(Controller)是Spring MVC的核心组件,负责处理HTTP请求。开发者可以使用@Controller注解定义控制器类,用@RequestMapping注解映射URL到特定的方法。这些方法通常返回ModelAndView对象,包含了视图名称和...

    spring MVC_快速入门

    可以使用@ControllerAdvice和@ExceptionHandler全局处理异常,为整个应用提供统一的错误页面或提示。 8. **拦截器(Interceptor)** 拦截器允许在请求处理前后执行自定义逻辑,比如登录检查、日志记录等。通过...

    Spring MVC使用Demo

    在Spring MVC中,Controller处理用户的请求,Model存储数据,而View负责渲染结果。 创建Spring MVC项目的第一步通常是设置开发环境。这通常包括安装Java Development Kit (JDK)、配置IDE(如IntelliJ IDEA或Eclipse...

Global site tag (gtag.js) - Google Analytics