• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot中如何统一接口返回与全局异常处理详解

springboot 搞代码 4年前 (2022-01-05) 16次浏览 已收录 0个评论

全局异常处理是个比较重要的功能,一般在项目里都会用到,这篇文章主要给大家介绍了关于SpringBoot中如何统一接口返回与全局异常处理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

背景

在分布式、微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式。前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。维护一套完善且规范的接口是非常有必要的, 这样不仅能够提高对接效率,也可以让我的代码看起来更加简洁优雅。

使用统一返回结果时,还有一种情况,就是程序的报错是由于运行时异常导致的结果,有些异常是我们在业务中抛出的,有些是无法提前预知。

因此,我们需要定义一个统一的全局异常,在Controller捕获所有异常,并且做适当处理,并作为一种结果返回。

统一接口返回

定义API返回码枚举类

 public enum ResultCode {    /* 成功状态码 */    SUCCESS(200, "成功"),        /* 错误状态码 */    NOT_FOUND(404, "请求的资源不存在"),    INTERNAL_ERROR(500, "服务器内部错误"),    PARAMETER_EXCEPTION(501, "请求参数校验异常"),        /* 业务状态码 */ <strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>   USER_NOT_EXIST_ERROR(10001, "用户不存在"),    ;    private Integer code;    private String message;    public Integer code() {        return this.code;    }    public String message() {        return this.message;    }    ResultCode(Integer code, String message) {        this.code = code;        this.message = message;    } } 

定义正常响应的API统一返回体

 @Data public class Result implements Serializable { private Integer code;    private String message;    private boolean success = true;    private T data;    @JsonIgnore    private ResultCode resultCode;    private Result() {    }    public void setResultCode(ResultCode resultCode) {        this.resultCode = resultCode;        this.code = resultCode.code();        this.message = resultCode.message();    }    public Result(ResultCode resultCode, T data) {        this.code = resultCode.code();        this.message = resultCode.message();        this.data = data;    }    public static  Result success() {        Result result = new Result();        result.setResultCode(ResultCode.SUCCESS);        return result;    }    public static  Result success(T data) {        Result result = new Result();        result.setResultCode(ResultCode.SUCCESS);        result.setData(data);            return result;    } } 

定义异常响应的API统一返回体

 @Data public class ErrorResult implements Serializable {    private Integer code;    private String message;    private boolean success = false;    @JsonIgnore    private ResultCode resultCode;    public static ErrorResult error() {        ErrorResult result = new ErrorResult();        result.setResultCode(ResultCode.INTERNAL_ERROR);        return result;    }    public static ErrorResult error(String message) {        ErrorResult result = new ErrorResult();        result.setCode(ResultCode.INTERNAL_ERROR.code());        result.setMessage(message);        return result;    }    public static ErrorResult error(Integer code, String message) {        ErrorResult result = new ErrorResult();        result.setCode(code);        result.setMessage(message);        return result;    }        public static ErrorResult error(ResultCode resultCode, String message) {        ErrorResult result = new ErrorResult();        result.setResultCode(resultCode);        result.setMessage(message)        return result;    } } 

编写包装返回结果的自定义注解

 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD})  //作用于方法和类(接口)上 @Documented public @interface ResponseResult { } 

定义返回结果拦截器

 @Component public class ResponseResultInterceptor implements HandlerInterceptor {    /* 使用统一返回体的标识 */    private static final String RESPONSE_RESULT_ANNOTATION = "RESPONSE-RESULT-ANNOTATION";    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object

以上就是SpringBoot中如何统一接口返回与全局异常处理详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot中如何统一接口返回与全局异常处理详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址