二.统一返回值封装


前言

统一封装后端返回值可以提高接口的一致性、安全性、可维护性和用户体验;统一返回结果中一般主要包含3个参数分别是code,msg,data

{
    "code": 200,
    "message": "操作成功",
    "data": {
        "age": 18,
        "msg": "张三"
    }
}

一、统一返回值

1.1.定义统一返回接口

package com.light.common.result;

/**
 * 统一返回码接口
 */
public interface IResultCode {
    /**
     * 返回码
     */
    long getCode();

    /**
     * 返回信息
     */
    String getMessage();
}

1.2.实现统一返回码

定义一个统一的返回码枚举类,目的是统一状态码和状态信息;

此处为了扩展性,多了一个IResultCode其目的是后续其他地方需要用的封装状态码的时候,只需要实现就行,不需要再重复定义,后续统一异常封装的时候

package com.light.common.result;

/**
 * 封装统一返回码
 */
public enum ResultCode implements IResultCode {

    SUCCESS(200, "操作成功"),
    FAILED(500, "操作异常"),
    VALIDATE_FAILED(400, "参数检验失败"),
    UNAUTHORIZED(401, "暂未登录或token已经过期"),
    FORBIDDEN(403, "没有相关权限");

    private ResultCode(long code, String message) {
        this.code = code;
        this.message = message;
    }

    private long code;
    private String message;

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

    @Override
    public String getMessage() {
        return message;
    }
}

1.3.封装通用返回结果类

package com.light.common.result;

import java.io.Serial;
import java.io.Serializable;

/**
 - 封装通用返回结果类
 */
public class BaseResult<T> implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 状态码
     */
    private long code;
    /**
     * 提示信息
     */
    private String message;
    /**
     * 数据封装
     */
    private T data;


    private BaseResult() {
    }

    private BaseResult(long code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }


    /**
     * 成功返回结果
     */
    public static <T> BaseResult<T> success() {
        return new BaseResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), null);
    }

    /**
     * 成功返回的结果
     *
     * @param message 成功提示消息
     */
    public static <T> BaseResult<T> success(String message) {
        return new BaseResult<T>(ResultCode.SUCCESS.getCode(), message, null);
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     */
    public static <T> BaseResult<T> success(T data) {
        return new BaseResult<T>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data);
    }

    /**
     * 失败返回结果
     */
    public static <T> BaseResult<T> failed() {
        return failed(ResultCode.FAILED);
    }

    /**
     * 失败返回结果
     *
     * @param message 提示信息
     */
    public static <T> BaseResult<T> failed(String message) {
        return new BaseResult<T>(ResultCode.FAILED.getCode(), message, null);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     * @param message   错误信息
     */
    public static <T> BaseResult<T> failed(IResultCode errorCode, String message) {
        return new BaseResult<T>(errorCode.getCode(), message, null);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     */
    public static <T> BaseResult<T> failed(IResultCode errorCode) {
        return new BaseResult<T>(errorCode.getCode(), errorCode.getMessage(), null);
    }


    public long getCode() {
        return code;
    }

    public void setCode(long code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "BaseResult{" +
                "code=" + code +
                ", message='" + message + '\'' +
                ", data=" + data +
                '}';
    }
}

说明:

实现Serializable为了类的对象需要序列化时,应该实现 Serializable 接口;其作用是

  • 允许对象在网络上传输或写入到文件中
  • 允许对象被存储到文件系统或数据库中

二、使用步骤

2.1创建测试Controller

light-api模块的controller包中,创建一个测试TestController,利用我们封装的统一返回类进行测试

package com.light.api.controller;

import com.light.common.result.BaseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/getMsg")
    public BaseResult<?> getTest() {
        Map<String, String> map = new HashMap<>();
        map.put("name","张三");
        map.put("age","18");
        return BaseResult.success(map);
    }
}

2.2 请求测试

使用PostMain进行测试
在这里插入图片描述

总结

以上就是封装统一返回值的内容,这里仅仅只是对正常的返回值进行了封装,下一章节续写统一异常处理的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值