- 浏览: 323117 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (254)
- java (178)
- tomcat (6)
- 邮件 (1)
- smtp (1)
- Linux (2)
- 编码 (2)
- 导入工程 (1)
- Specification Level (1)
- hibernate (10)
- 字段类型 (1)
- 字段类型匹配 (1)
- 数据库 (3)
- sql (9)
- struts2 (8)
- 类型转换 (2)
- java,MyEclipse,SVN (1)
- Myecplise (4)
- 输入校验 (1)
- JFrame (2)
- Oracle (8)
- google (1)
- Swing (3)
- Fusioncharts (1)
- 找工作 (0)
- js (4)
- jsp (11)
- displaytag (1)
- spring (8)
- 工作 (1)
- String (1)
- 算法 (2)
- IO (1)
- xml (3)
- 设计模式 (1)
- UML (1)
- 文档 (1)
- ajax (1)
- 日常 (7)
- sql server (1)
- mysql (3)
- git (1)
- Maven (1)
- mongodb (1)
- postman (1)
最新评论
有时候我们想处理某个类里Controller中抛出的异常怎么搞呢?
直接在Controller里面加上用@ExceptionHandler标注一个处理异常的方法像下面这样子
这样,Controller里面的方法抛出了MissingServletRequestParameterException异常就会执行上面的这个方法来进行异常处理。
像我下面的代码
如果我没有传入id值,那么就会抛出MissingServletRequestParameterException的异常,就会被上面的异常处理方法处理。
上面的@ExceptionHandler(MissingServletRequestParameterException.class)这个注解的value的值是一个Class[]类型的,这里的ExceptionClass是你自己指定的,你也可以指定多个需要处理的异常类型,比如这样@ExceptionHandler(value = {MissingServletRequestParameterException.class,BindException.class}),这样就会处理多个异常了。
但这个只会是在当前的Controller里面起作用,如果想在所有的Controller里面统一处理异常的话,可以用@ControllerAdvice来创建一个专门处理的类。
下面讲解@ControllerAdvice:
@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:
没什么特别之处,该注解使用@Component注解,这样的话当我们使用<context:component-scan>扫描时也能扫描到。
@ControllerAdvice其javadoc里描述到:
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
接下来看段代码:
如果你的spring-mvc配置文件使用如下方式扫描bean:
需要把@ControllerAdvice包含进来,否则不起作用:
1、@ModelAttribute注解的方法作用请参考SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解——跟着开涛学SpringMVC中的【二、暴露表单引用对象为模型数据】,作用是一样的,只不过此处是对所有的@RequestMapping注解的方法都起作用。当需要设置全局数据时比较有用。
2、@InitBinder注解的方法作用请参考SpringMVC数据类型转换——第七章 注解式控制器的数据验证、类型转换及格式化——跟着开涛学SpringMVC,同1类似。当需要全局注册时比较有用。
3、@ExceptionHandler,异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等,还可以接受一个当前抛出的Throwable对象。可以参考javadoc或snowolf的Spring 注解学习手札(八)补遗——@ExceptionHandler。
该注解非常简单,大多数时候其实只@ExceptionHandler比较有用,其他两个用到的场景非常少,这样可以把异常处理器应用到所有控制器,而不是@Controller注解的单个控制器。
转自:http://blog.csdn.net/u013632755/article/details/49908621
直接在Controller里面加上用@ExceptionHandler标注一个处理异常的方法像下面这样子
@ExceptionHandler(MissingServletRequestParameterException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public void processMethod(MissingServletRequestParameterException ex,HttpServletRequest request ,HttpServletResponse response) throws IOException { System.out.println("抛异常了!"+ex.getLocalizedMessage()); logger.error("抛异常了!"+ex.getLocalizedMessage()); response.getWriter().printf(ex.getMessage()); response.flushBuffer(); }
这样,Controller里面的方法抛出了MissingServletRequestParameterException异常就会执行上面的这个方法来进行异常处理。
像我下面的代码
@RequestMapping("/index") public String index(@MyUser User user,@RequestParam String id,ModelMap modelMap){ return "login"; }
如果我没有传入id值,那么就会抛出MissingServletRequestParameterException的异常,就会被上面的异常处理方法处理。
上面的@ExceptionHandler(MissingServletRequestParameterException.class)这个注解的value的值是一个Class[]类型的,这里的ExceptionClass是你自己指定的,你也可以指定多个需要处理的异常类型,比如这样@ExceptionHandler(value = {MissingServletRequestParameterException.class,BindException.class}),这样就会处理多个异常了。
但这个只会是在当前的Controller里面起作用,如果想在所有的Controller里面统一处理异常的话,可以用@ControllerAdvice来创建一个专门处理的类。
下面讲解@ControllerAdvice:
@ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice { }
没什么特别之处,该注解使用@Component注解,这样的话当我们使用<context:component-scan>扫描时也能扫描到。
@ControllerAdvice其javadoc里描述到:
即把@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。非常简单,不过只有当使用@ExceptionHandler最有用,另外两个用处不大。
接下来看段代码:
@ControllerAdvice public class ControllerAdviceTest { @ModelAttribute public User newUser() { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前把返回值放入Model"); return new User(); } @InitBinder public void initBinder(WebDataBinder binder) { System.out.println("============应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器"); } @ExceptionHandler(UnauthenticatedException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) public String processUnauthenticatedException(NativeWebRequest request, UnauthenticatedException e) { System.out.println("===========应用到所有@RequestMapping注解的方法,在其抛出UnauthenticatedException异常时执行"); return "viewName"; //返回一个逻辑视图名 } }
如果你的spring-mvc配置文件使用如下方式扫描bean:
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
需要把@ControllerAdvice包含进来,否则不起作用:
<context:component-scan base-package="com.sishuok.es" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/> </context:component-scan>
1、@ModelAttribute注解的方法作用请参考SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解——跟着开涛学SpringMVC中的【二、暴露表单引用对象为模型数据】,作用是一样的,只不过此处是对所有的@RequestMapping注解的方法都起作用。当需要设置全局数据时比较有用。
2、@InitBinder注解的方法作用请参考SpringMVC数据类型转换——第七章 注解式控制器的数据验证、类型转换及格式化——跟着开涛学SpringMVC,同1类似。当需要全局注册时比较有用。
3、@ExceptionHandler,异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等,还可以接受一个当前抛出的Throwable对象。可以参考javadoc或snowolf的Spring 注解学习手札(八)补遗——@ExceptionHandler。
该注解非常简单,大多数时候其实只@ExceptionHandler比较有用,其他两个用到的场景非常少,这样可以把异常处理器应用到所有控制器,而不是@Controller注解的单个控制器。
转自:http://blog.csdn.net/u013632755/article/details/49908621
发表评论
-
领域精通涉及技术点(不分先后)
2017-12-20 19:35 618Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1634我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1434String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1180今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 455讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 972emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 441BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5781、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2965http://donald-draper.iteye.com/ ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 1009spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 704java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 517诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 505http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 470Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 402要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 487spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1075需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 874按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 488412345 -
spring依赖包解析
2017-06-01 14:36 371http://www.cnblogs.com/leehonge ...
相关推荐
总结来说,"利用SpringMVC切面捕获全局异常入库源码"项目展示了如何使用Spring AOP来替代传统的`HandlerExceptionResolver`实现全局异常处理。通过创建自定义切面和后置通知,可以捕获任何未被特定控制器方法处理的...
例如,在Spring框架中,使用@ControllerAdvice和@ExceptionHandler注解可以定义全局异常处理类和方法。当应用程序中发生异常时,Spring会自动调用该方法来处理异常。这种方法适用于在全局范围内处理所有类型的异常。...
此外,还可以使用`@ControllerAdvice`注解和`@ExceptionHandler`注解来定义一个全局的异常处理类。 3. 错误页面配置:在SpringMVC的配置中,可以通过`<error-page>`标签定义不同类型的错误代码对应的错误页面,或者...
在"spring boot demo"项目中,你将找到关于异常处理、AOP(面向切面编程)以及 Redis 整合的实践示例。 **异常处理**在Spring Boot中通常通过`@ControllerAdvice`和`@ExceptionHandler`注解实现。`@...
在Spring中,异常处理主要是通过AOP(面向切面编程)来实现的,它允许我们在不修改原有业务代码的情况下,对程序运行过程中的异常进行统一管理。 【描述】:“Spring异常处理共5页.pdf.zip” 描述中的“共5页”...
在异常处理中,Spring MVC可以通过配置`@ExceptionHandler`注解或者全局异常处理器(如`HandlerExceptionResolver`接口实现类)来捕获并处理异常。 3. **MyBatis**:MyBatis是一个轻量级的持久层框架,它将SQL语句...
在本项目中,我们将结合SpringBoot、Redis和Shiro来实现SSO功能,并进行统一的异常处理和日志管理。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它简化了新Spring应用的初始搭建以及开发过程。...
`ErrorController`的优势在于,即使在过滤器、切面或拦截器中抛出的异常,也能被正确捕获。 总结起来,Spring Boot提供的这两种异常处理方式各有优缺点。`@ControllerAdvice`和`@ExceptionHandler`注解适合处理特定...
捕获自定义异常可以使用@ExceptionHandler()注解,@ExceptionHandler()该注解作用主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑...
在SpringBoot中,你可以使用@Aspect注解来定义一个切面,@Before、@After、@Around等注解用于定义通知(advice),即在特定方法执行前后插入的代码。 3. **异常处理** 在SpringBoot中,我们可以使用@...
3. **SpringBoot与AOP结合**: Spring Boot可以结合Spring的面向切面编程(AOP)实现更复杂的全局异常处理。AOP允许我们定义“切面”,即跨越多个对象的行为或责任,我们可以定义一个切面来捕获和处理所有应用的异常...
Spring Data JPA提供了一种声明式的方式来进行数据库操作,只需要定义Repository接口,就能实现CRUD操作。而MyBatis则允许我们编写自定义的SQL语句,具有更高的灵活性。SpringBoot通过配置文件(application....
对于异常处理,我们可以使用`@AfterThrowing`注解来捕获并处理异常: ```java import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.springframework....
可以使用@Valid和BindingResult注解来进行数据验证,Spring会自动调用JavaBeans的Validator接口来执行验证规则。若验证失败,BindingResult对象可以提供错误信息。 本地化和国际化支持允许开发者为不同地区的用户...
它还提供了异常处理机制,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常。 Spring MVC还集成了Spring框架的其他功能,如AOP(面向切面编程)用于实现事务管理、日志记录等。另外,通过ModelAndView...
Spring MVC提供了一套完善的异常处理机制,允许开发者自定义全局或特定控制器的异常处理器,通过@ControllerAdvice或@ExceptionHandler注解进行配置,以优雅地处理程序中抛出的异常,并返回合适的视图或响应。...
日志记录通常与异常处理紧密相关,Spring MVC提供了良好的机制来将异常记录到日志中,包括通过SLF4J和Log4j等日志框架,以及通过AOP(面向切面编程)来实现日志记录的横切关注点。 JUnit单元测试是保证代码质量的...
在Java开发中,Spring框架是广泛使用的,而Spring AOP(面向切面编程)则提供了一种优雅的方式来处理全局的异常。本篇文章将深入探讨如何使用Spring注解AOP进行异常处理,特别是基于`@ControllerAdvice`的方式。 一...
这些只是 Spring MVC 基本概念的一部分,实际的压缩包资料可能涵盖了更深入的内容,如AOP(面向切面编程)、Spring Security、Spring Data JPA、事务管理等。学习这些资料,开发者可以全面掌握 Spring MVC 的使用,...
异常处理通过Spring的@ControllerAdvice和@ExceptionHandler可以统一处理全局异常。事务管理则可通过Spring的@Transactional注解来实现,保证数据操作的原子性。性能优化可以从SQL优化、缓存策略、并发控制等多方面...