点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

作者:小李子说程序

www.toutiao.com/i6878184496945070604

前言

软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。

推荐理由

  • 代码复制到项目中通过简单的配置即可实现

  • 可以灵活的根据自己的业务异常进行更细粒度的扩展

实践

1 封装统一返回结果类

源代码

public class AjaxResult {//是否成功private Boolean success;//状态码private Integer code;//提示信息private String msg;//数据private Object data;public AjaxResult() {}//自定义返回结果的构造方法public AjaxResult(Boolean success,Integer code, String msg,Object data) {this.success = success;this.code = code;this.msg = msg;this.data = data;}//自定义异常返回的结果public static AjaxResult defineError(BusinessException de){AjaxResult result = new AjaxResult();result.setSuccess(false);result.setCode(de.getErrorCode());result.setMsg(de.getErrorMsg());result.setData(null);return result;}//其他异常处理方法返回的结果public static AjaxResult otherError(ErrorEnum errorEnum){AjaxResult result = new AjaxResult();result.setMsg(errorEnum.getErrorMsg());result.setCode(errorEnum.getErrorCode());result.setSuccess(false);result.setData(null);return result;}public Boolean getSuccess() {return success;}public void setSuccess(Boolean success) {this.success = success;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}

2 自定义异常封装类

源码:

public class BusinessException extends RuntimeException {private static final long serialVersionUID = 1L;/*** 错误状态码*/protected Integer errorCode;/*** 错误提示*/protected String errorMsg;public BusinessException(){}public BusinessException(Integer errorCode, String errorMsg) {this.errorCode = errorCode;this.errorMsg = errorMsg;}public Integer getErrorCode() {return errorCode;}public void setErrorCode(Integer errorCode) {this.errorCode = errorCode;}public String getErrorMsg() {return errorMsg;}public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}
}

3 错误枚举,拒绝硬编码

源码

public enum ErrorEnum {// 数据操作错误定义SUCCESS(200, "成功"),NO_PERMISSION(403,"你没得权限"),NO_AUTH(401,"未登录"),NOT_FOUND(404, "未找到该资源!"),INTERNAL_SERVER_ERROR(500, "服务器异常请联系管理员"),;/** 错误码 */private Integer errorCode;/** 错误信息 */private String errorMsg;ErrorEnum(Integer errorCode, String errorMsg) {this.errorCode = errorCode;this.errorMsg = errorMsg;}public Integer getErrorCode() {return errorCode;}public String getErrorMsg() {return errorMsg;}
}

4 全局异常处理类

源码

/*** 全局异常处理器* */
@RestControllerAdvice
public class GlobalExceptionHandler
{private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);/*** 处理自定义异常**/@ExceptionHandler(value = BusinessException.class)public AjaxResult bizExceptionHandler(BusinessException e) {log.error(e.getMessage(), e);return AjaxResult.defineError(e);}/***处理其他异常**/@ExceptionHandler(value = Exception.class)public AjaxResult exceptionHandler( Exception e) {log.error(e.getMessage(), e);return AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);}}

5 测试

返回结果:

昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。

关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。

需要刷题笔记PDF文档的小伙伴可以直接长按扫码关注下方二维码,回复 「刷题笔记」 四个字自取:

关注下方公众号

????????????

回复关键字「刷题笔记」,即可下载

笔记版权归原作者所有,转载请注明出处 https://books.halfrost.com/leetcode/

公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!...相关推荐

  1. 公司这套架构统一处理 try...catch 真香!

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  2. 不要再满屏写 try...catch 了!这个更香!

    点击关注公众号,Java干货及时送达 来源:www.toutiao.com/i6878184496945070604 前言 软件开发springboot项目过程中,不可避免的需要处理各种异常,spri ...

  3. controller方法要trycatch吗_拜托,别再满屏try catch了,试试统一异常处理吧

    点击蓝色"JavaKeeper"关注我哟 加个"星标",一起成长,做牛逼闪闪的技术人 https://sourl.cn/SLnSKu 背景 软件开发过程中,不可 ...

  4. 从零开始搭建公司微服务架构技术栈,这套架构绝了...

    近年,Spring Cloud 俨然已经成为微服务开发的主流技术栈,在国内开发者社区非常火爆.我近年一直在一线互联网公司(携程,拍拍贷等)开展微服务架构实践,根据我个人的一线实践经验和我平时对 Spr ...

  5. 开放计算架构:蚂蚁金服是如何用一套架构容纳所有计算的?

    蚂蚁金服在过去十五年重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑.在 2019 杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享.我们将其 ...

  6. 梳理公司的组织架构 --- 组合模式

    题外话 本来是周更的频率, 因为真实的"小光"真实地逃离了北京, 回了武汉, 回了老家, 处理了一些私人事务. 也就有快一个月时间没有更新了, 抱歉. 年终总结也都没有时间写, 抽 ...

  7. 降本提效,贝壳搜索推荐架构统一之路

    导语 | 搜索和推荐是用户获取信息的两种主要方式,在贝壳也是帮助客户找到房子的主要手段,那么二者都有哪些相似和不同之处?是否可以使用同一套架构来实现?统一架构之后又能带来哪些收益呢?本文是对贝壳搜索推 ...

  8. 吃透这套架构体系,三年成为架构师!

    蓦然回首自己做开发已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜 ...

  9. 吃透这套架构演化图,从零搭建Web网站也不难

    转载自 吃透这套架构演化图,从零搭建Web网站也不难 前言 工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对 ...

最新文章

  1. 为什么阿里程序猿纷纷在内网晒代码?
  2. TS中补充的六个类型
  3. python多维数据存储_在Python中存储和重新加载大型多维数据集
  4. JVM辅助信息参数设置
  5. 镜像电流源特点_9000大型地网变频大电流接地特性测量系统介绍
  6. 采样算法哪家强?一个针对主流采样算法的比较
  7. iOS相关,过年回来电脑上的证书都失效了
  8. 跟踪 linux 内核调用_Linux用户和内核空间中的动态跟踪
  9. linux查看tmp,linux下find(文件查找)命令的用法总结-tmp文件
  10. 轻量应用服务器安装mysql_阿里云轻量应用服务器Linux-Centos7下MySQL8.0.19的安装
  11. oracle for aix 7,ORACLE 11.2.0.2 RAC for AIX 7.1
  12. linux下socket调试,linux下socket调试
  13. html华文行楷的英文,字体英文代码.htm
  14. JavaScript中的变量 函数 对象的定义和方法
  15. oracle 时间毫秒数,计算Oracle中两个时间戳之差(以毫秒为单位)
  16. 深度学习方法(十五):知识蒸馏(Distilling the Knowledge in a Neural Network),在线蒸馏
  17. [转贴]请珍惜你身边爱你的人
  18. U盘系统盘制作与系统安装(详细图解)
  19. 华为mate40pro+和华为p40pro+哪个好
  20. 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...

热门文章

  1. 密码学摘要算法之MD5
  2. 6 Java Shell排序
  3. 15:解决IntelliJ IDEA的乱码问题
  4. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows
  5. java自学 day1
  6. Facial keypoints detection Kaggle 竞赛系列
  7. php display_errors
  8. 使用静态URL片段 URL路由 精通ASP-NET-MVC-5-弗瑞曼
  9. Alpha阶段项目总结
  10. 转:YUV RGB 常见视频格式解析