ControllerAdvice用法解析

简介

  通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。
  注解了@Controller的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
  @ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上
  @ExceptionHandler:用于全局处理控制器里的异常。

用法

@ControllerAdvice
@ResponseBody

//RestControllerAdvice 上面2个注释等于此一个注释
public class BusinessExceptionHandler {
@ExceptionHandler(value = Exception.class)
public JsonBackData exceptionHandler(HttpServletRequest request, Exception e) {
e.printStackTrace();
JsonBackData back = new JsonBackData();
if (e instanceof BusinessException) {
BusinessException ex = (BusinessException) e;
back.setSuccess(false);
back.setBackMsg(ex.getMessage());
}
return back;
  }

加了这个全局配置的Bean后,以前的代码是这样的:

  @RequestMapping(value = "queryDetail")
@ResponseBody
public JsonBackData queryDetail(@RequestParam String id) {
JsonBackData back = new JsonBackData();
try {
OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
back.setBackData(vo);
back.setSuccess(true);
back.setBackMsg("查询详细信息成功");
} catch (BusinessException e) {
back.setSuccess(false);
back.setBackMsg("查询详细信息失败:" + e.getMessage());
}
return back;
}

多了很多无关信息。几乎每个类都要try catch一下,代码极度冗余。
但是加了上面的全局处理控制器的异常处理后。代码就变成了下面的了。

@RequestMapping(value = "queryDetail")
@ResponseBody
public JsonBackData queryDetail(@RequestParam String id) {
JsonBackData back = new JsonBackData();
OpenSourceThrottleAdjustVO vo = openSourceThrottlePlanQueryService.findById(id);
back.setBackData(vo);
back.setSuccess(true);
back.setBackMsg("查询详细信息成功");
return back;
}

Spring Boot 系列 @ControllerAdvice 拦截异常并统一处理的更多相关文章

  1. @ControllerAdvice 拦截异常并统一处理(转载)

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  2. Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  3. @ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  4. SpringBoot 之 @ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  5. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

  6. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    1. Spring Boot Admin 是什么 Spring Boot Admin 是由 codecentric 组织开发的开源项目,使用 Spring Boot Admin 可以管理和监控你的 S ...

  7. Spring Boot 系列教程8-EasyUI-edatagrid扩展

    edatagrid扩展组件 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面. 使用的时候需要额外引入jquery.edatagrid.js ...

  8. Spring Boot 系列教程7-EasyUI-datagrid

    jQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要 ...

  9. 国内最全的Spring Boot系列之二

    历史文章 <国内最全的Spring Boot系列之一> 视频&交流平台 SpringBoot视频:http://t.cn/R3QepWG Spring Cloud视频:http:/ ...

随机推荐

  1. error launching installer-最新版Win 10 解决方案

    error 提示 error launching installer遇到 error的背景 楼主最近重新装了Windows 10 pro 64 bit 版,安装的时候选的地区是United State ...

  2. K3CLOUD新增用户

    1.在金蝶云之家对应的产品序列中新增用户 2.在CLOUD本地查询用户-同步注册用户后,云平台用户会同步至本地

  3. Freemarker空值判断

    freemarker中显示某对象使用${name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: <#if name??> …… </#if& ...

  4. js Dom 编程

    1. 节点及其类型:  1). 元素节点  2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作.  3). 文本节点: 是元素节点的子节点, 其内容为文本.   2. 在 html 文档的 ...

  5. MyBatis:一对一关联查询

    MyBatis从入门到放弃三:一对一关联查询 前言 简单来说在mybatis.xml中实现关联查询实在是有些麻烦,正是因为起框架本质是实现orm的半自动化. 那么mybatis实现一对一的关联查询则是 ...

  6. Gitblit 的安装使用

    1.下载gitblit,可以网上下载,也可以在下面云盘链接取 gitblit-1.8.0  下载链接:https://pan.baidu.com/s/1x7dnbyDp1FmYjMosJbGR8w 密 ...

  7. BZOJ1070[SCOI2007]修车——最小费用最大流

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  8. BZOJ4555 HEOI2016/TJOI2016求和(NTT+斯特林数)

    S(i,j)=Σ(-1)j-k(1/j!)·C(j,k)·ki=Σ(-1)j-k·ki/k!/(j-k)!.原式=ΣΣ(-1)j-k·ki·2j·j!/k!/(j-k)! (i,j=0~n).可以发现 ...

  9. 一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记

    一个数学不好的菜鸡的快速沃尔什变换(FWT)学习笔记 曾经某个下午我以为我会了FWT,结果现在一丁点也想不起来了--看来"学"完新东西不经常做题不写博客,就白学了 = = 我没啥智 ...

  10. jar文件放在桌面上双击启动不了,但放在其它任何文件夹里都可以双击启动

    今天本来是想尝试一下Java Network Launching Protocol (JNLP,java网络加载协议) 的,写了一个简单的窗口程序,打包成jar保存到桌面上,双击等了半天没显示出来. ...