springboot 全局异常做法
springboot 配置全局异常,其实非常简单,只需要一个简单的配置类
package com.sinosig.ewp.wx.service.config; import com.sinosig.ewp.common.base.ResultDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; /** * @author Mongo * @return */ @RestControllerAdvice @Slf4j public class GraceExceptionHandler { /** * 全局异常捕获 * @param e * @return */ @ExceptionHandler(Exception.class) @ResponseBody public Object returnException(Exception e) { log.error("error",e); return ResultsBean.build(500,"全局异常啦啦啦"); } }
重点是:这个配置类上的注解:@RestControllerAdvice ,方法上的注解 @ExceptionHandler(Exception.class)
之后程序里面,一旦发生了任何异常,都会走这里的异常方法,即可达到全局异常捕获!
==============
下面是 ResultsBean 统一返回格式工具类
package com.sinosig.ewp.wx.service.config; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** * api 统一返回前端数据格式工具类 * @author Mongo * @param * @return */ @Data @Component @Slf4j public class ResultsBean { private Integer status; private Integer change; private String msg; private Object data; public static ResultsBean ok(Object data) { return new ResultsBean(data); } public static ResultsBean ok() { return new ResultsBean(ResponseStatusEnum.SUCCESS); } public static ResultsBean answerOperation(int answer) { if(answer > 0) { return ResultsBean.ok(); } return ResultsBean.error(); } public ResultsBean() { this.status = 200; this.msg = "success"; } public ResultsBean(ResponseStatusEnum responseStatus) { this.status = responseStatus.status(); this.msg = responseStatus.msg(); } public ResultsBean(ResponseStatusEnum responseStatus, Object data) { this.status = responseStatus.status(); this.msg = responseStatus.msg(); this.data = data; } public ResultsBean(ResponseStatusEnum responseStatus, String msg) { this.status = responseStatus.status(); this.msg = msg; } public static ResultsBean error() { return new ResultsBean(ResponseStatusEnum.FAILED); } public static ResultsBean errorCustom(ResponseStatusEnum responseStatus) { return new ResultsBean(responseStatus); } public static ResultsBean exception(ResponseStatusEnum responseStatus) { return new ResultsBean(responseStatus); } public static ResultsBean build(Integer status, String msg) { return new ResultsBean(status, msg, null); } public static ResultsBean build(ResponseStatusEnum responseStatus) { return new ResultsBean(responseStatus.status(), responseStatus.msg(), null); } public ResultsBean(Integer status, String msg, Object data) { this.status = status; this.msg = msg; this.data = data; } public ResultsBean(Object data) { this.status = 200; this.msg = "success"; this.data = data; } }
package com.sinosig.ewp.wx.service.config; /** * 响应结果枚举,用于提供给JSON Result 统一格式化返回给前端 * @author Mongo */ public enum ResponseStatusEnum { SUCCESS(200, true, "success"),//操作成功 FAILED(500, false, "failure"),//操作失败 FAILED_All(500, false, "failure_all"),//操作失败 PARAM_NULL(101,false,"param_null"),//请求参数为空 DATA_NULL(102,false,"data_null"),//返回数据为空 OTHER_ERROR(103,false,"other_error"),//其他未知错误 TOKEN_EXPIRE(104,false,"token_expire"),//token 失效 ; private Integer status;//响应业务状态 private Boolean success;//调用是否成功 private String msg;//响应消息,可以为成功或者失败的消息 public void setMsg(String msg) { this.msg = msg; } private String addMsg;//附加消息,会拼接在msg后面 ResponseStatusEnum(Integer status, Boolean success, String msg) { this.status = status; this.success = success; this.msg = msg; } ResponseStatusEnum(Integer status, Boolean success, String msg, String addMsg) { this.status = status; this.success = success; this.msg = msg; this.addMsg = addMsg; } public Integer status() { return status; } public Boolean success() { return success; } public String msg() { return msg; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通