spring框架做全局异常捕获_@ControllerAdvice注解(全局异常捕获)

30bba7f8f9e38522b020dd8a1f8f1391.png

背景

@ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的方法。

@ExceptionHandler异常处理器

作用:可以拦截程序抛出来的指定异常。使用场景:主要使用与项目统一异常处理,对于rest风格的返回统一异常格式。

/**       * 指定拦截异常的类型       *       * @param e       * @return json格式类型       */@ExceptionHandler({Exception.class}) //指定拦截异常的类型    @ResponseBody    public Object customExceptionHandler(Exception e) {        //打印异常日志        e.printStackTrace();        //非空验证异常        if(e instanceof BindException){            BindException bindException = (BindException) e;            String msg =  bindException.getBindingResult().getFieldError().getDefaultMessage();            return msg;        }        if(e instanceof GlobalException){            GlobalException globalException = (GlobalException) e;            return globalException.getErrMsg();        }        return "系统异常";    }

@InitBinder

作用:
应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器
使用场景:
1.可用于绑定作用于全局的请求参数验证器。
2.日期格式把请求中的日期字符串转换成Date类型。

/**       * 应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器       *       * @param binder       

自定义参数验证器使用传送门:SpringBoot自定义参数验证器

@ModelAttribute

作用:把值绑定到Model中,使全局@RequestMapping可以获取到该值

使用场景:大家发挥自己那聪明的小脑袋吧,本人也没想到哪里实战使用!

/**     * 把值绑定到Model中,使全局@RequestMapping可以获取到该值      *     * @param model     */    @ModelAttribute    public void addAttribute(Model model) {        model.addAttribute("msg", "hello");    }

获取参数:

 @GetMapping("test")       @ResponseBody       public Object test(@ModelAttribute("msg") String msg){             return msg;       }

完整的代码

package com.wzq.config.exception;import org.springframework.ui.Model;import org.springframework.validation.BindException;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.*;/** * @description: 全局异常处理类 * @author: Wzq * @create: 2019-12-26 11:01 */@RestControllerAdvicepublic class GlobalExceptionAdvice {        /**     * 指定拦截异常的类型     *     * @param e     * @return json格式类型     */    @ExceptionHandler({Exception.class}) //指定拦截异常的类型    @ResponseBody    public Object customExceptionHandler(Exception e) {        //打印异常日志        e.printStackTrace();        //非空验证异常        if(e instanceof BindException){            BindException bindException = (BindException) e;            String msg =  bindException.getBindingResult().getFieldError().getDefaultMessage();            return msg;        }        if(e instanceof GlobalException){            GlobalException globalException = (GlobalException) e;            return globalException.getErrMsg();        }        return "系统异常";    }    /**     * 应用到所有@RequestMapping注解方法,在其执行之前初始化数据绑定器     *     * @param binder     */    @InitBinder    public void initWebBinder(WebDataBinder binder) {        //对日期的统一处理//        binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));        //添加对数据的校验        //binder.setValidator();    }    /**     * 把值绑定到Model中,使全局@RequestMapping可以获取到该值     *     * @param model     */    @ModelAttribute    public void addAttribute(Model model) {        model.addAttribute("msg", "hello");    }}

@RestControllerAdvice 和 @ControllerAdvice区别在于@RestControllerAdvice不需要加@ResponseBody

442034f815d156df60ab32d64d29757e.png

转载自GoslingWu,未经许可,严禁抄袭

更多相关内容,Java&python,软件开发等学习资料,电子书及视频还有高级讲师免费课程,

需要的可以私聊小编发送【学习】二字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepMind推出「控制套件」:为「强化学习智能体」提供性能基准

来源:arxiv作者:Yuval Tassa, Yotam Doron, Alistair Muldal, Tom Erez,Yazhe Li, Diego de Las Casas, David Budden, Abbas Abdolmaleki, Josh Merel,Andrew Lefrancq, Timothy Lillicrap, Martin Riedmiller「雷克世界」编译:嗯~阿童木呀、…

pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...

在介绍矩阵的压缩存储前,我们需要明确一个概念:对于特殊矩阵,比如对称矩阵,稀疏矩阵,上(下)三角矩阵,在数据结构中相同的数据元素只存储一个。 [TOC] 三元组顺序表 稀疏矩阵由于其自…

【视频】2017,50个令人屏息的科技瞬间

来源:甲子光年概要:整个世界的巨变,肇始于一颗微尘的颤动。「甲子光年」挑选了属于2017年的50个科技瞬间。十年后再回望时,它们可能正是那个撼动世界的历史性时刻。即将过去的2017年,一定有这样的一瞬:整个…

机加工程序工时程序_准终工时、人工工时、机器工时,十个工程师九个会弄错...

​上一篇文章种蚂蚁先生跟大家详细分析了产品成本的组成,其主要分为材料成本和制造成本两个部分。 然而要得到制造成本,则必须有标准工时数据。那么标准工时究竟是什么呢?​标准工时制: 标准工时是在标准工作环境下,进…

互联网大脑的云反射弧路径选择问题,兼谈ET大脑模糊认知反演理论

互联网大脑的云反射弧路径选择问题研究2008年以来,我们在互联网大脑架构和互联网进化的研究中提到,“互联网大脑架构,就是互联网向与人类大脑高度相似的方向进化过程中,形成的类脑巨系统架构。互联网云脑架构具备不断成熟的类脑视…

如何传入比较器_typescript专题(五) 装饰器

欢迎来到我专题文章【typescript】,更多干货内容持续分享中,敬请关注!本章目标基于webpack4.x从0开始搭建ts的开发环境ts中的装饰器的基本使用基于webpack4.x从0开始搭建ts的开发环境webpack4.x已经问世好久了,0配置是一大亮点&am…

『报告』IDC:2018年物联网产业10大预测

来源:T客汇编译概要:根据市场研究公司IDC的报告,2018年全球物联网支出总额将达到7720亿美元。新年新气象,2017年被称作物联网(IoT)元年,而2018年还将续写IoT的高歌猛进。根据市场研究公司IDC的报…

hbase获取表信息_HBase的读写和javaAPI的使用

一、hbase系统管理表hbase:namespace,记录了hbase中所有namespace的信息 ,当前系统下有哪些namespace信息scan hbase:namespacehbase:meta,记录了region信息scan hbase:meta二、读写思想client(get、scan)rowkey条件(1)由于rowkey是存储在region上的(2)判…

机器学习必知的15大框架

作者 | Devendra Desale译者 | Mags来源 | 云栖社区不管你是一个研究人员,还是开发者,亦或是管理者,想要使用机器学习,需要使用正确的工具来实现。本文介绍了当前最流行15个机器学习框架。机器学习工程师是开发产品和构建算法团队…

区分大小屏幕_第一个Python程序——在屏幕上输出文本

本节我将给大家介绍最简单、最常用的 Python 程序——在屏幕上输出一段文本,包括字符串和数字。Python 使用 print 函数在屏幕上输出一段文本,输出结束后会自动换行。在屏幕上输出字符串字符串就是多个字符的集合,由双引号" "或者单…

2018 年物联网发展五大趋势预测

来源:腾股创投作者 :Pramod Chandrayan物联网已经开始在所有行业的企业中走向主流。 到 2018 年底,物联网支出预计将增长 15%,达到 7725 亿美元,毫无疑问,未来一年连接设备和企业物联网项目数量…

js中立即执行函数会预编译吗_JavaScript预编译过程

什么是预编译?当js代码执行时有三个步骤:1.语法分析,这个过程检查出基本的语法错误。2,预编译,为对象分配空间。3,解释执行,解释一行执行一行,一旦出错立即停止执行。预编译发生在代…

知识图谱火了,但你知道它的发展历史吗?|赠书5本

作者:尼克 编辑|Emily版式由AI前线整理知识图谱火了,但你知道它的发展历史吗?本文节选自《人工智能简史》第 3 章,从第一个专家系统 DENDRAL 到语义网再到谷歌的开源知识图谱,对知识图谱的发展历程进行了…

英特尔爆发史诗级芯片漏洞,Linux之父痛斥英特尔公司

来源:CEO来信概要:1月4日消息,英特尔处理器存在芯片级漏洞的消息仍在发酵,恐怕将会成为计算机行业发展史上最大的安全漏洞之一。1月4日消息,英特尔处理器存在芯片级漏洞的消息仍在发酵,恐怕将会成为计算机行…

曲线均匀分布_曲线篇:深刻理解B 样条曲线(下)

前两篇中讲解了贝塞尔曲线和B样条基础。FrancisZhao:曲线篇: 贝塞尔曲线​zhuanlan.zhihu.comFrancisZhao:曲线篇:深刻理解B 样条曲线(上)​zhuanlan.zhihu.com本文讲一下B样条的进阶clamped B样条由于我们常用的B样条…

JSON.parse()解析单引号错误的问题

1、当用JSON.parse()方法,解析从后台传来的json字符串,而且字符串中含有单引号(如Iam ....),页面将出现如下异常 2、页面引起报错部分 3、解决办法:在后台将特殊字符转义 bookBlockVoListJSONString BaseStringUtils.getJsonFor…

Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一

原文来源:arxiv作者:Alexander Kirillov、Kaiming He1、Ross Girshick、Carsten Rother、Piotr Dollar「雷克世界」编译:嗯~阿童木呀、KABUDA现如今,我们提出并研究了一种新的“全景分割”(Panoramic segmentation&…

art.dialog弹出框后再根据其内部iframe的大小调整大小

1、主页面,用来弹出弹出页面 //查看错误小练习$.exerciseClick function(rowId ){$.event.get().preventDefault();var tdScore $("#" rowId).find("[aria-describedbyhomeworkStudentListGrid_score]");if( parseInt(tdScore.html()) 100 …

句子录音打分代码参考

1、页面名称:sentenceReadRecordDialogAnyone.jsp 2、页面效果 3、页面源码 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%><script la…

工具用途_见微知著,小工具大用途!

为什么同一个饮品&#xff0c;店家做的尝起来如此美味。拿到配方后自己做的不是甜了就是酸了呢&#xff1f;相信很多朋友都有这种疑惑。但真相往往就会在不经意间被忽视&#xff0c;很多初学者并没有老师傅那样的熟练手感&#xff0c;可以做到信手拈来的程度。当没有那些量勺&a…