spring boot 环境下的统一异常处理大家已经非常熟悉了,不熟悉的化可以参考
<<Spring Boot中Web应用的统一异常处理>>。公司内部的统一异常处理如下:

 @ExceptionHandler
public ResultEntity<?> handler(HttpServletRequest req, HttpServletResponse res, Exception e) {
logger.info("统一异常处理,Restful Http请求发生异常,HTTP响应码信息:{}", res.getStatus());
ResultEntity<?> resultEntity = new ResultEntity();
if (e instanceof BizException) {
logger.error("统一异常处理,异常代码00:" + e.getMessage());
resultEntity.setCode(this.getReturnCode(((BizException)e).getCode()));
resultEntity.setMsg(((BizException)e).getMsg());
return resultEntity;
} else if (e instanceof NullPointerException) {
exceptionCount.incrementAndGet();
logger.error("统一异常处理,异常代码01:" + e.getMessage(), e);
resultEntity.setCode(this.getReturnCode(ReturnCodeEnum.NULL_POINTER_EXCEPTION.code));
resultEntity.setMsg(ReturnCodeEnum.NULL_POINTER_EXCEPTION.msg);
return resultEntity;
}

可以看到它设定的返回出参的json格式为:

{
"code": "7060124001",
"msg": "参数校验未通过:[不能为空]"
}

项目需要重构。这个模块业务返回的接口json格式应该为:

{
"respCode": "7060124001",
"respDesc": "参数校验未通过:[不能为空]",
"respInfo": null
}

我们是否可以定义一个@RestControllerAdvice,并在spring boot 生效?实验后是可以。在定义两个@RestControllerAdvice后日志输出有两个:

Detected @ExceptionHandler methods in myControllerAdvice|
Detected @ExceptionHandler methods in controllerExceptionHandleAdvice|

自定义的myControllerAdvice也是生效的。如果你需要排除基础jar包controllerExceptionHandleAdvice带来的影响,你可以在启动类上加上如下注解:

@ComponentScan(value="com.epay.ts.piss.basic.springboot",excludeFilters= {@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE, value= {ControllerExceptionHandleAdvice.class})})

上面注解的学习可以参见spring boot去除扫描自动注入依赖方法

在依赖的框架中已经有统一异常处理的情况下,如何定制自己的统一异常处理spring boot版本的更多相关文章

  1. 同一容器中a标签比较多的情况下通过title属性值隐藏

    同一容器中a标签比较多的情况下如何通过title属性值控制a标签的隐藏或显示 最近项目中遇到一个IE兼容性问题,网站需要在底部footer添加"站长统计"代码,容器中动态添加很多a ...

  2. 关于angular JS 中$timeOut 的一些不正常情况下的$destory

    最近项目中存在的问题头疼脑热了好一会. 我先简单说明下问题是由,使用$timeOut循环调用的时候由于页面存在异步加载会出现反复执行循环反复调用$timeOut,怎么清除跳出循环都不管用.于是查到了如 ...

  3. 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||

    换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...

  4. 【转载】Sqlserver数据库中无自增Id的情况下使用ROW_NUMBER()函数进行数据分页

    在Sqlserver数据库中,如果查询表中含有自增长Id列,一般会采用select Top的方式来数据的分页操作.而实际上很多数据表设计的时候,不一定含有自增长Id列,那么数据库没有Id自增列的时候要 ...

  5. 在Node.js中在保持目录结构的情况下压缩指定目录

    最近在做一个文件升级的功能,需要从下载服务器中指定目录下的文件.在学习了zlib后发现这个模块达不到这个功能 在查找资料后发现后发现 archiver 模块很好用,不过我也发现大部分中文资料没有如果查 ...

  6. Python+Selenium框架 ---一个类文件多个测试方法情况下测试固件的写法

    我们测试中,肯定需要,打开一个页面,然后测试这个页面的多个用例,才关闭这个页面,去测试其他页面,在unittest是有相关测试固件方法去支持这种行为.请看下面 # coding=utf-8 impor ...

  7. Android手机中怎么样在没root的情况下 修改 hosts 文件

    工具  链接:https://pan.baidu.com/s/1AENluDCQ-2qYDPcE5K6l8g 密码:t7eu  http://bbs.360.cn/forum.php?mod=view ...

  8. Django框架,python2和python3共存的情况下,创建Django项目

    一.python2和python3共存的情况下,直接使用 django-admin startproject Django-project 这个时候系统默认使用的是python2创建,可能由于pyth ...

  9. virtualBox中有线和无线两种情况下centos虚拟机和本地机互ping的方案

    之前写微信点餐系统的时候,刚开始是无线连接,然后每次进去虚拟机ip和本地ip都会改变,所以每次都需要配置一下nginx,还有本地的路径.之后换有线连接,就研究了一下桥接模式有线情况下虚拟机静态ip设置 ...

随机推荐

  1. vue项目 WebViewJavascriptBridge 适配android和ios

    前言 最近在app 原生页面 嵌套 做Vue 的H5,混合开发,当然原生和Vue 交互方面当然用到 WebViewJavascriptBridge 这个东西啦, 当然在用到的时候也有问题,可以参考大佬 ...

  2. 关于RedisTemplate和StringRedisTemplate(转)

    最近在开始在学习Redis以及如何在Java当中去使用Redis,Redis是什么我这里就不说了. 我主要想说的是Redis和Java当中Spring结合起来的时候,使用到的RedisTemplate ...

  3. CentOS 安装oracle client

    下载Oracle Client 1.通过下载地址下载 下载地址:https://www.oracle.com/database/technologies/instant-client/linux-x8 ...

  4. ansible变量定义

    一./etc/ansible/hosts [webServers] 192.168.2.200 http_port=8009 [web]web1web2 [db]db1db2 [app:childre ...

  5. MySQL常见内存不足启动失败的完美解决方法

    Move to https://www.jb51.net/article/136432.htm

  6. 11.EL(表达式语言)

    一.EL概述 EL(Expression Language,表达式语言)是JSP2.0 中引入的新内容.通过EL可以简化在JSP中对对象的引用,从而规范页面代码,增加程序的可读性和可维护性. 1.EL ...

  7. js对象及初识面向对象(4)

    一.什么是对象? 对象是包含了属性和方法的集合体 二.什么是面向对象? 面向对象是一种编程思想,在JS当中利用原型来阐述这种思想的编程方法 三.构建对象: 1.内置对象: String   Math  ...

  8. bk复面-一场被问蒙蔽了的面试

    1.自我介绍         ---自我介绍从个人生活上.兴趣爱好上去介绍,比如我自己,平时喜欢听听音乐.看看鸡汤类的书,比如爱下厨,喜欢根据一些网上的教程去尝试做一份自己满意的晚餐,简历上已经写得工 ...

  9. js计算textarea输入文字的长度

    前言 日常开发过程中,有些时候我们想使用textarea,然后限制输入的长度,在textarea末尾显示剩余可输入的字节数. 如下图:  解决方法: 常用的有三种方法: 1.通过判断charCodeA ...

  10. 《SVG精髓》笔记(二)

    3. 文档结构 在SVG中使用样式(四种方式,可以联想对照HTML样式方法) 内联样式, 直接在标签里设置style属性 <circle cx='20' cy='20' r='10' style ...