@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理

统一异常处理

需要配合@ExceptionHandler使用。
当将异常抛到controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面

//全局异常捕捉处理
@ControllerAdvice
public class CustomExceptionHandler {@ResponseBody@ExceptionHandler(value = Exception.class)public Map errorHandler(Exception ex) {Map map = new HashMap();map.put("code", 400);//判断异常的类型,返回不一样的返回值if(ex instanceof MissingServletRequestParameterException){map.put("msg","缺少必需参数:"+((MissingServletRequestParameterException) ex).getParameterName());}else if(ex instanceof MyException){map.put("msg","这是自定义异常");}return map;}
}
//自定义异常类
@Data
public class MyException extends RuntimeException {private long code;private String msg;public MyException(Long code, String msg){super(msg);this.code = code;this.msg = msg;}public MyException(String msg){super(msg);this.msg = msg;}
}
@RestController
public class TestController {@RequestMapping("testException")public String testException() throws Exception{throw new MissingServletRequestParameterException("name","String");}@RequestMapping("testMyException")public String testMyException() throws MyException{throw new MyException("i am a myException");}
}

分别访问testExceptiontestMyException接口,可得到以下结果

{"msg":"缺少必需参数:name","code":400}
{"msg":"这是自定义异常","code":400}

如果不需要返回json数据,而要渲染某个页面模板返回给浏览器,那么可以这么实现:

@ExceptionHandler(value = MyException.class)
public ModelAndView myErrorHandler(MyException ex) {ModelAndView modelAndView = new ModelAndView();//指定错误页面的模板页modelAndView.setViewName("error");modelAndView.addObject("code", ex.getCode());modelAndView.addObject("msg", ex.getMsg());return modelAndView;
}

这样子很方便吧~

@ControllerAdvice实现优雅地处理异常相关推荐

  1. java @valid 密码不一致_一个成熟的Java项目如何优雅地处理异常

    (一)概述 异常处理是一个系统最重要的环节,当一个项目变得很大的时候,异常处理和日志系统能让你快速定位到问题.对于用户或者接口调用者而言,优雅的异常处理可以让调用者快速知道问题所在.本文将介绍如何优雅 ...

  2. 如何优雅处理前端异常?

    如何优雅处理前端异常? 参考文章: (1)如何优雅处理前端异常? (2)https://www.cnblogs.com/fundebug/p/how_to_handle_frontend_error. ...

  3. 优雅地处理异常真是一门学问啊!

    01.前言 你有没有这样的印象,当你想要更新一款 APP 的时候,它的更新日志里总有这么一两句描述: 修复若干 bug 杀了某程序员祭天,并成功解决掉他遗留的 bug 作为一名负责任的程序员,我们当然 ...

  4. 如何优雅的处理异常?SpringBoot全局异常与数据校验

    要思考的问题 在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后 ...

  5. 全局异常处理器——优雅的处理异常

    是什么 全局异常处理器即 把错误异常统一处理的方法.Java开发过程中,不可避免的会遇到各种异常情况,如果不做处理往往会导致程序崩溃!面对这种情况,传统方式就是使用try/catch去捕获并处理异常, ...

  6. 前端try catch是如何捕获异常的_一文告诉你如何优雅处理前端异常?

    前端一直是距离用户最近的一层,随着产品的日益完善,我们会更加注重用户体验,而前端异常却如鲠在喉,甚是烦人. 一.为什么要处理异常? 异常是不可控的,会影响最终的呈现结果,但是我们有充分的理由去做这样的 ...

  7. [译]Go如何优雅的处理异常

    原文:hackernoon.com/golang-hand- 注:译文中error可以理解为异常,但Go中的error和Java中的异常还是有很大区别的,需要读者慢慢体会,所以为了方便阅读和思考,译文 ...

  8. java退出不报异常_如何优雅的处理异常(java)?

    这篇文章应该可以解答你的疑问. Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题:什么出了错? ...

  9. 优雅 | koa处理异常

    一个良好的编码习惯必然离不开异常处理,本文将会介绍如何在koa框架下面如何抛出错误,并统一处理返回异常. 正常错误处理 koa是一个优秀的NodeJs web框架,在我们开发web项目的时候,避免不了 ...

最新文章

  1. 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型
  2. ssh长时间不操作便断开_不懂Excel文件恢复方法?只要跟着这样操作,便可以光速恢复文件...
  3. QT信号和槽函数学习笔记
  4. 4-5:TCP协议之确认应答(ACK)机制和超时重传机制
  5. 企业微信接收消息服务器配置php,微信企业号配置及在公众号里获取用户信息
  6. 深入C++“准”标准库,Boost你的力量
  7. 中兴新支点操作系统_国产操作系统崛起之作 中兴新支点OS解析
  8. CRMEB打通版简单一步实现类似京东的PLUS会员功能
  9. SOC课程实验——PC程序计数器设计
  10. 【译文】学习深度学习的四个步骤
  11. linux发行版本号列举,查看Linux发行版的名称及其版本号
  12. Apache POI简介
  13. mapDispatchToProps
  14. 计算机数据采集 的优点,数据采集器的作用_数据采集器硬件特点
  15. 一款超好的省市区三级联动插件citypicher的使用(数据分从数据库获取或从js文件获取)
  16. FM(Factorization Machine)因式分解机 与 TensorFlow实现 详解
  17. log4j2 漏洞的简单利用
  18. 《Linux操作系统-系统移植》第4章 内核移植 - 内核解析(Linux3.14)
  19. 关联规则与购物篮分析实战
  20. 「Arm Arch」 微架构

热门文章

  1. [转载] 使用 Web 标准生成 ASP.NET 2.0 Web 站点
  2. c#中索引器是什么_C#中的索引器
  3. css div滚动_如何使用CSS创建可垂直滚动的div?
  4. 企业办公自动化系统_OA系统的核心功能有哪些?分析当下OA系统的缺陷以及相关解决方案...
  5. c语言字符串匹配函数index,C语言(函数)学习之index、rindex
  6. stl resize函数_vector :: resize()函数以及C ++ STL中的示例
  7. java 方法 示例_Java集合asLifoQueue()方法和示例
  8. 工程中多个不同类型线程池_软件工程中不同类型的设计策略
  9. CTF【解密】字符串flag被加密成已知新字符串,请解密出flag,可以使用Python解码出WriteUp
  10. 嵌入式linux设计师,make在linux——《嵌入式linux设计与应用》