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 {};
}

  1. @ControllerAdvice作为一个@Component,用以定义 @ExceptionHandler/@InitBinder/@ModelAttribute 修饰的方法 , 适用于所有使用 @RequestMapping的方法.
  2. Spring4之前,@ControllerAdvice 在同一调度的Servlet中协助所有控制器.Spring4之后,@ControllerAdvice支持配置控制器的子集,且默认的行为仍可用
  3. 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处理架构异常捕获相关推荐

  1. 微服务架构之全局异常(@ControllerAdvice + @ExceptionHandler)

    微服务架构之全局异常处理 一.定义全局异常处理类(GlobalExceptionHandler) 1.在cloud-common模块中创建全局异常处理类GlobalExceptionHandler 2 ...

  2. 全局异常捕获处理-@ControllerAdvice+@HandleException

    涂涂影院管理系统这个demo中有个异常管理的标签,用于捕获 涂涂影院APP用户异常信息 ,有小伙伴好奇,排除APP,后台端的是如何处理全局异常的,故项目中的实际应用已记之. 关于目前的异常处理 在使用 ...

  3. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    1.利用springmvc注解对Controller层异常全局处理 对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service ...

  4. @ExceptionHandler全局异常捕获响应体返回中文乱码

    问题现象 在全局异常处理后,发现响应体返回中文的错误信息竟然乱码了,如下: 问题原因 Controller @RequestMapping(value = "/user/{user_id}& ...

  5. Spring - @ControllerAdvice + @ExceptionHandler全局处理Controller层异常(转)

    Spring - @ControllerAdvice + @ExceptionHandler全局处理Controller层异常(转) 参考文章: (1)Spring - @ControllerAdvi ...

  6. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  7. 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了

    人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],不仅分享技术,还会分享生活趣事.体育. ...

  8. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  9. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获

    spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...

最新文章

  1. 查看mysql数据库大小、表大小和最后修改时间
  2. Wireshark分析非标准端口号流量
  3. 求一个二叉树中距离最远的两个节点
  4. Python---基础---list(列表)
  5. 简单干净的Emlog6.0.1技术导航模板源码-视频教程
  6. 万恶的C++ 【1】:类型及运算
  7. 玩cf一直连接服务器失败怎么办啊,windows10系统玩cf提示连接服务器失败怎么办...
  8. Upload LABS Pass-5
  9. 《计算机科学导论》百度云,【麻省理工学院】Python编程和计算机科学导论公开课(中英字幕)...
  10. 让软件自己写软件,机器编程未来会取代程序员吗?
  11. 项目开发中遇到的问题,原因,解决思路
  12. Julia: 趣!,13579分别在一本168页书的页码中出现的次数
  13. Linux C编程实战——第六章 文件操作_项目实现_自写ls命令
  14. linux如何快速入门
  15. ybc_xxx类模块应用1-ybc_speech(第一片)
  16. uniapp canvas 图片加上文字合成一张新图并保存到手机相册
  17. GitHub 热门项目:PyTorch 资源大全
  18. 如何高效阅读英文文献
  19. vue 父组件、子组件对象改变_VUE里子组件获取父组件动态变化的值
  20. zookeeper操作封装——curator使用分布式锁使用

热门文章

  1. python endif_python – Django:无效的块标记:’static’,预期’endif’
  2. html称为什么标签,HTML: html 标签
  3. 文献速递第1期:fNIRS 的近期研究
  4. excel数据拆分怎么做
  5. AVFoundation里用到的相关库(一)
  6. 建筑中人行为模拟研究现状和展望(2015)
  7. 解决主从复制数据不一致的情况
  8. 第八章 Hbase专题之架构设计详述(图解)
  9. SpringCloud搭建专题【gateway统一管理swaggerApi】
  10. 电子台账:教程目录及软件下载