Spring Boot 定义公共结果集输出对象


placeholder image
admin 发布于:2022-05-09 10:11:03
阅读:loading

背景介绍

任何系统都应该是有一个统一的结果集作为接口请求的输出对象,SpringBoot内置了两个DefaultErrorAttributes类来统一处理接口输出(报错时的场景),默认情况接管了我们程序中的接口输出结果,它定义的属性为:timestamp、status、error、message、path(若请求结果输出为@ResponseBody时输出这5个属性,若输出至model页面时,还会输出更多的异常属性),在阿里编码规范中也声明了应定义响应信息,比如说必须包含 HTTP 状态码,errorCode、errorMessage、用户提示信息四个部分。说明:四个部分的涉众对象分别是浏览器、前端开发、错误排查人员、用户。其中输出给用户的提示信息要求:简短清晰、提示友好,引导用户进行下一步操作或解释错误原因,提示信息可以包括错误原因、上下文环境、推荐操作等。errorMessage:简要描述后端出错原因,便于错误排查人员快速定位问题,注意不要包含敏感数据信息。

正例:常见的 HTTP 状态码如下

1)200 OK:表明该请求被成功地完成,所请求的资源发送到客户端。

2)401 Unauthorized:请求要求身份验证,常见对于需要登录而用户未登录的情况。

3)403 Forbidden:服务器拒绝请求,常见于机密信息或复制其它登录用户链接访问服务器的情况。

4)404 NotFound:服务器无法取得所请求的网页,请求资源不存在。

5)500 InternalServerError:服务器内部错误。

errorCode与errorMessage包含一些状态码和中文描述,参考如下所示:

00000:一切OK,正确执行后的返回;A0001:用户端错误;A0100:用户注册错误;A0111:用户名已存在;等等等等。

注:以上几段的70%的内容选自于《Java开发手册(黄山版).pdf》,说明咱们系统肯定是需要自定义统一的结果集输出对象,不仅仅是在发生错误的时候,在响应正常的情况也是需要有全局的统一结构的请求响应结果集,本篇文章将分享本站中的结果集对象封装的实现,参考定义结构如下:

image.png

所以,本站统一的输出JSON格式的数据对象基类名称定义为BaseResult,附属的还有Success、Error、None等实现类型,关于命名也可以是BaseResponse等,相关的代码参考为:

BaseResult定义

package cn.chendd.base.result;

import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;

/**
 * 操作结果集对象
 *
 * @author chendd
 * @date 2022/5/18 21:09
 */
@Getter
public class BaseResult {

    /**
     * 操作结果
     */
    @ApiModelProperty("操作结果:ResultEnum")
    protected String result;

    /**
     * 操作结果提示
     */
    @ApiModelProperty("操作结果提示")
    protected String message;

    /**
     * 数据对象
     */
    @ApiModelProperty("数据对象")
    protected Object data;

    /**
     * 设置message数据
     * @param message message
     * @return success对象
     */
    public BaseResult message(String message) {
        this.message = message;
        return this;
    }

    /**
     * 设置数据对象
     * @param data data
     * @return success对象
     */
    public BaseResult data(Object data) {
        this.data = data;
        return this;
    }

    /**
     * 操作结果枚举定义
     */
    @Getter
    public static enum ResultEnum {

        /**
         * 操作成功
         */
        success ,
        /**
         * 操作失败
         */
        error,
        /**
         * 默认无动作
         */
        none,
        ;

    }

}

SuccessResult定义

package cn.chendd.base.result;

/**
 * 操作成功结果集对象
 * @author chendd
 * @date 2022/5/18 21:19
 */
public class SuccessResult extends BaseResult {

    private SuccessResult() {

    }

    /**
     * 构造Success对象
     * @return success对象
     */
    public static SuccessResult build() {
        SuccessResult result = new SuccessResult();
        result.result = BaseResult.ResultEnum.success.name();
        return result;
    }
}

源码下载

源码工程下载可转至https://gitee.com/88911006/chendd-blog-examples项目的BaseResult分支;

 点赞


 发表评论

当前回复:作者

 评论列表


留言区