公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!
2022/6/14 4:20:14
本文主要是介绍公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
全局异常捕获是非常重要的一个用法,在大多项目中都会用到,下文中有详悉代码说明,文末附涨薪秘籍
软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc 架构中各层会出现大量的 try {...} catch {...} finally {...}
代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。
推荐理由
-
代码复制到项目中通过简单的配置即可实现
-
可以灵活的根据自己的业务异常进行更细粒度的扩展
[toc]
实践
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.测试
- 返回结果
JavaPub参考巨人:https://www.toutiao.com/i6878184496945070604
推荐文章
今年不论对于国家还是我们个人都是决胜之年,特此安排 2021 JavaPub版 面试题及题解详细参考(全网搜:JavaPub版),包括:
基础,JVM,容器,多线程,反射,异常,网络,对象拷贝,JavaWeb,设计模式,Spring-Spring MVC,Spring Boot / Spring Cloud,Mybatis / Hibernate,Kafka,RocketMQ,Zookeeper,MySQL,Redis,Elasticsearch,Lucene。订阅不迷路,2021奥利给。
做一道BAT面试题
BAT
这篇关于公司这套架构统一处理 try...catch 这么香,求求你不要再满屏写了,再发现扣绩效!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Rocket消息队列资料:新手入门指南
- 2024-11-27rocket消息队资料详解与入门指南
- 2024-11-27RocketMQ底层原理资料详解入门教程
- 2024-11-27RocketMQ项目开发资料:新手入门教程
- 2024-11-27RocketMQ项目开发资料详解
- 2024-11-27RocketMQ消息中间件资料入门教程
- 2024-11-27初学者指南:深入了解RocketMQ源码资料
- 2024-11-27Rocket消息队列学习入门指南
- 2024-11-26Rocket消息中间件教程:新手入门详解
- 2024-11-26RocketMQ项目开发教程:新手入门指南