从零搭建SpringBoot后台框架(三)——请求结果封装

203 阅读1分钟

一、目的

统一返回数据格式,方便前端使用,可以统一对错误进行处理

二、响应码接口&枚举类

package com.example.demo.common.http;

public interface ErrorCode {
    String getCode();
    String getMsg();
}
package com.example.demo.common.http;

public enum RestCode implements ErrorCode {
    SUCCESS("000000", "操作成功"),
    FAIL("999999", "操作失败"),
    ;

    private final String code;
    private final String msg;

    RestCode(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }
}

三、定义返回对象格式及转换方法封装

package com.example.demo.common.http;

public class RestResult<T> {
    private String code;
    private String msg;
    private T data;

    public RestResult(ErrorCode errorCode) {
        this(errorCode, null);
    }

    public RestResult(ErrorCode errorCode, T data) {
        this.code = errorCode.getCode();
        this.msg = errorCode.getMsg();
        this.data = data;
    }

    public static <T> RestResult<T> getSuccessResult() {
        return new RestResult<T>(RestCode.SUCCESS);
    }

    public static <T> RestResult<T> getSuccessResult(T data) {
        return new RestResult<T>(RestCode.SUCCESS, data);
    }

    public static <T> RestResult<T> getFailResult() {
        return new RestResult<T>(RestCode.FAIL);
    }

    public static <T> RestResult<T> getFailResult(ErrorCode errorCode) {
        return new RestResult<T>(errorCode);
    }

    public String getCode() {
        return code;
    }

    public RestResult<T> setCode(String code) {
        this.code = code;
        return this;
    }

    public String getMsg() {
        return msg;
    }

    public RestResult<T> setMsg(String msg) {
        this.msg = msg;
        return this;
    }

    public T getData() {
        return data;
    }

    public RestResult<T> setData(T data) {
        this.data = data;
        return this;
    }

}

四、测试验证

改造controller代码

改造前代码

@PostMapping("/selectById")
public UserInfo selectById(Long id) {
    return userInfoService.selectById(id);
}

改造前请求返回数据格式

{
    "id": 1,
    "userName": "2",
    "password": "3"
}

改造后代码

@PostMapping("/selectById")
public RestResult<UserInfo> selectById(Long id) {
    UserInfo userInfo = userInfoService.selectById(id);
    return RestResult.getSuccessResult(userInfo);
}

改造后请求返回数据格式

{
    "code": "000000",
    "msg": "操作成功",
    "data": {
        "id": 1,
        "userName": "2",
        "password": "3"
    }
}

文件最新整体结构

image.png

五、项目地址

gitee

PS:可以通过tag下载本文对应的代码版本

六、结尾

请求结果封装已完成,有问题可以联系chenzhenlindx@qq.com

七、参考文章

  1. 从零搭建自己的SpringBoot后台框架(三)