@ControllerAdvice+@ExceptionHandler处理架构异常捕获
1.注解引入
1) @ControllerAdvice - 控制器增强
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice {@AliasFor("basePackages")String[] value() default {};@AliasFor("value")String[] basePackages() default {};Class<?>[] basePackageClasses() default {};Class<?>[] assignableTypes() default {};Class<? extends Annotation>[] annotations() default {}; }
- @ControllerAdvice作为一个@Component,用以定义 @ExceptionHandler/@InitBinder/@ModelAttribute 修饰的方法 , 适用于所有使用 @RequestMapping的方法.
- Spring4之前,@ControllerAdvice 在同一调度的Servlet中协助所有控制器.Spring4之后,@ControllerAdvice支持配置控制器的子集,且默认的行为仍可用
- Spring4之后,@ControllerAdvice通过annotations()/basePackageClasses()/basePackages()方法定制用于选择控制器子集.
2) @ExceptionHandler - 异常处理器
@Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ExceptionHandler {Class<? extends Throwable>[] value() default {}; }
单独用@ExceptionHandler,限定当前Controller处理异常.配合@ControllerAdvice则摆脱此限制.
2.使用实例
@ControllerAdvice public class MultipartExceptionControllerAdvice {private static final Logger log = LoggerFactory.getLogger(MultipartExceptionControllerAdvice.class);/*** 捕获文件上传异常* @param ex* @return*/@ResponseBody@ExceptionHandler(value = MultipartException.class)public FrontResult fileErrorHandler(MultipartException ex) {FrontResult result = new FrontResult();result.setHasLive(0);result.setCode(500);result.setMsg("FAIL.");log.error("file upload error : " , ex);return result;}}
3.处理Exception在捕获@ResponseStatus修饰的自定义异常时操作
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus;import javax.servlet.http.HttpServletRequest;@ControllerAdvice public class ExceptionAdvice {@ExceptionHandler(Exception.class)@ResponseBodypublic String handlerException(HttpServletRequest request , Exception e) throws Exception {e.printStackTrace();if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {throw e;}return e.getMessage();}}
:::: 如果碰到了某个自定义异常加上了@ResponseStatus,就继续抛出,这样就不会让自定义异常失去加上@ResponseStatus的初衷。
转载于:https://www.cnblogs.com/nyatom/p/10219988.html
@ControllerAdvice+@ExceptionHandler处理架构异常捕获相关推荐
- 微服务架构之全局异常(@ControllerAdvice + @ExceptionHandler)
微服务架构之全局异常处理 一.定义全局异常处理类(GlobalExceptionHandler) 1.在cloud-common模块中创建全局异常处理类GlobalExceptionHandler 2 ...
- 全局异常捕获处理-@ControllerAdvice+@HandleException
涂涂影院管理系统这个demo中有个异常管理的标签,用于捕获 涂涂影院APP用户异常信息 ,有小伙伴好奇,排除APP,后台端的是如何处理全局异常的,故项目中的实际应用已记之. 关于目前的异常处理 在使用 ...
- 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
1.利用springmvc注解对Controller层异常全局处理 对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service ...
- @ExceptionHandler全局异常捕获响应体返回中文乱码
问题现象 在全局异常处理后,发现响应体返回中文的错误信息竟然乱码了,如下: 问题原因 Controller @RequestMapping(value = "/user/{user_id}& ...
- Spring - @ControllerAdvice + @ExceptionHandler全局处理Controller层异常(转)
Spring - @ControllerAdvice + @ExceptionHandler全局处理Controller层异常(转) 参考文章: (1)Spring - @ControllerAdvi ...
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...
- 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了
人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],不仅分享技术,还会分享生活趣事.体育. ...
- Spring Boot配置全局异常捕获
1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...
- spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获
spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...
最新文章
- 查看mysql数据库大小、表大小和最后修改时间
- Wireshark分析非标准端口号流量
- 求一个二叉树中距离最远的两个节点
- Python---基础---list(列表)
- 简单干净的Emlog6.0.1技术导航模板源码-视频教程
- 万恶的C++ 【1】:类型及运算
- 玩cf一直连接服务器失败怎么办啊,windows10系统玩cf提示连接服务器失败怎么办...
- Upload LABS Pass-5
- 《计算机科学导论》百度云,【麻省理工学院】Python编程和计算机科学导论公开课(中英字幕)...
- 让软件自己写软件,机器编程未来会取代程序员吗?
- 项目开发中遇到的问题,原因,解决思路
- Julia: 趣!,13579分别在一本168页书的页码中出现的次数
- Linux C编程实战——第六章 文件操作_项目实现_自写ls命令
- linux如何快速入门
- ybc_xxx类模块应用1-ybc_speech(第一片)
- uniapp canvas 图片加上文字合成一张新图并保存到手机相册
- GitHub 热门项目:PyTorch 资源大全
- 如何高效阅读英文文献
- vue 父组件、子组件对象改变_VUE里子组件获取父组件动态变化的值
- zookeeper操作封装——curator使用分布式锁使用