- 浏览: 314048 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 561Java8 netty jvm kafaka消息队列 上传下载 ... -
计算机各种单位讲解及换算
2017-12-13 13:54 1544我还听过有UK的 一、最小单位:位(bit,缩写为b) 在原 ... -
JAVA字符串格式化-String.format()和MessageFormat的使用
2017-12-05 10:39 1278String.format()常规类型的格式化 Stri ... -
eclipse启动项目常见问题
2017-11-16 17:46 1138今儿遇到了个问题,ecli ... -
字符编码笔记:ASCII,Unicode和UTF-8
2017-10-23 16:37 417讲的太牛逼了: http://ww ... -
emoji简单讲解
2017-10-23 15:17 914emoji处理方式大起底 http://blog.csdn.n ... -
BigDecimal讲解
2017-10-12 15:58 399BigDecimal 由任意精度的整数非标度值 和 32 位的 ... -
eclips 控制台console上不打印信息
2017-09-06 21:53 5361、进windows菜单 -> show view -& ... -
详解RequestMappingHandlerMapping和RequestMappingHandlerAdapter
2017-08-29 17:08 2908http://donald-draper.iteye.com/ ... -
Spring 注解@Component、@Repository、@Service、@Controller区别
2017-08-28 15:27 962spring 2.5 中除了提供 @Com ... -
线程的一点小总结
2017-08-23 20:36 659java中main方法启动的是一个进程还是一个线程? 答:是一 ... -
线程池
2017-08-23 17:35 475诸如Web 服务器、数据库 ... -
Class源码大概讲解
2017-08-23 16:47 475http://blog.csdn.net/a327369238 ... -
Spring 事务相关
2017-08-14 12:10 434Transactionz注解的readOnly ... -
把时间当做朋友-前言
2017-08-13 20:47 363要管理的不是时间,而是自己。人们生活在同一个世界,却又各自 ... -
单例里面的方法讲解
2017-08-11 14:55 454spring里的controller是单例的。系统针对每个co ... -
eclipse拷贝出来的项目名称还是原来的
2017-07-26 16:46 1028需要修改的有如下几个地方: 1、pom.xml里面打包的名字一 ... -
自定义hibernate方言,新增自定义函数
2017-06-27 10:47 841按位与运算(&)在许多数据库中都是支持的,遗憾的是,H ... -
http请求参数:header body paramter三种参数区别、联系
2017-06-19 10:46 477012345 -
spring依赖包解析
2017-06-01 14:36 335http://www.cnblogs.com/leehonge ...
相关推荐
Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...
例如,在Spring框架中,使用@ControllerAdvice和@ExceptionHandler注解可以定义全局异常处理类和方法。当应用程序中发生异常时,Spring会自动调用该方法来处理异常。这种方法适用于在全局范围内处理所有类型的异常。...
1.使用自定义错误页面处理异常案例 2.使用 @ExceptionHandler 注解处理异常案例 3.使用 @ControllerAdvice 注解处理异常案例 4.使用配置类处理异常案例 5.使用自定义类处理异常案例
spring mvc统一处理异常,通过@ControllerAdvice+@ExceptionHandler
ExceptionHandler:json格式的处理程序异常
详细介绍了Spring Boot最常用的30个注解,包含概念、原理、示例 Spring Boot最常用的30个...六、 全局异常处理相关 1 @ControllerAdvice 2 @ExceptionHandler 七、 Spring Data JPA相关 1 @Entity 2 @Table 3 @Id ……
博主看到新服务是封装的自定义异常,准备入手剖析一下,自定义的异常是如何进行抓住我们请求的方法的异常,并进行封装返回到。废话不多说,先看看如何才能实现封装异常,先来一个示例: 1 @ControllerAdvice 2 ...
iOS异常捕捉提示,发送邮件及写入异常日志。 提供 断言, 错误的具体位置(类名及行数)、所有异常报告内容、及异常报告文件路径接口。 并统一展示 异常日志 。
iOS异常捕捉提示,发送邮件及写入异常日志。 提供 断言, 错误的具体位置(类名及行数)、所有异常报告内容、及异常报告文件路径接口。 并统一展示 异常日志 。
Android 测试捕获全局异常消息ExceptionHandler用法,我自己测试抛出一个异常,thread为未捕获异常的线程, e为未捕获的异常,收集当前的手机信息,捕获手机当前的异常信息,然后写入异常信息到文件中,最后使用 ...
哨兵例外处理程序Reekoh IoT平台的Sentry异常处理程序插件
在本系列文章的第一部分里,我们讨论了异常发生时,该返回给 REST API 调用者的异常表示(格式)的佳实践。 在本文(第二部分)中... HandlerExceptionResolvers 对于用一种统一的方法来处理异常来说非常的理想,
SSM笔记-SpringMVC的异常处理,包含了ExceptionHandler注解、ResponseStatusExceptionResolver、DefaultHandlerExceptionResolver、SimpleMappingExceptionResolver的使用和试验
自定义错误处理首先,您将在此代码中找到一个使用@RestControllerAdvice和@ExceptionHandler方法将异常映射到Spring Boot中的状态代码的基本方法示例。 但是,最有趣的部分是注入自定义的ErrorController实现和重写...
通过定义继承RuntimeException的异常类及继承ExceptionHandler的异常处理类,手动从dao层捕获异常。非常实用!
1.新建GlobalExceptionHandler 全局异常处理类 @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { /** * 处理MyException异常 */ @ExceptionHandler(MyException.class) public ...
- 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通...
通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 为提升查询效率,在蘑菇学名字段上建立了索引 基于卷积神经网络的蘑菇识别微信小程序+文档说明+数据集(高分项目).zip...
使用@ExceptionHandler添加异常处理程序方法 添加客户 更新客户 删除客户 API积分 @RequestMapping(“ / api”) @GetMapping(“ / customers”) @GetMapping(“ / customers / {customerId}”) @...
如果要使用默认异常处理程序的呈现功能,但又要使用第三方异常处理程序中的报告逻辑,则此功能很有用。 通常可以通过添加另一个Monolog处理程序来扩展报告逻辑,但是所有异常都将被打包为字符串,这并不总是可行的...