自定义接口返回通用类

代码重构:创建接口返回通用类与HTTP状态码枚举
博主通过将重复的后台接口返回代码进行重构,创建了一个RequestResult通用类和RequestCode枚举,用于规范HTTP请求状态码。通用类包含多种静态方法,以方便快捷地构建不同状态的响应数据,如请求成功、资源未找到、执行失败等,并可自定义消息和数据。这提高了代码复用性和可读性。

最近工作任务比较重,心累,在写代码的时候发现一个问题,后台接口最后返回数据的那几行代码写起来很难受,总感觉一直在重复的写,所以决定把它提取一下,写个共通类,先看看提取共通前后的对比:
提取共通前:
在这里插入图片描述
提取共通后:
在这里插入图片描述

第一步:规范接口返回状态码

public class EnumUtil {

    /**
     * HTTP请求状态码枚举
     */
    public static enum RequestCode{

        SUCCESS(200,"请求成功。"),
        
        //逻辑上失败
        FAIL(201,"执行失败"),

        NOT_FOUND(404,"用户请求的资源不存在。"),

        //程序BUG
        SERVER_ERROR(500,"服务器发生错误。");


        public Integer code;
        public String msg;

        RequestCode(Integer code,String msg){
            this.code = code;
            this.msg = msg;
        }
    }
}
code不全是肯定的,我打个样,你们自己补充吧,后续我用到新的也会更新进来

第二步:新建接口返回通用类

public class RequestResult {

    /**
     * 请求成功
     * @return
     */
    public static Map<String,Object> SUCCESS(){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",EnumUtil.RequestCode.SUCCESS.msg);
        return result;
    }

    /**
     * 请求成功
     * @param data 返回数据
     * @return
     */
    public static Map<String,Object> SUCCESS(Object data){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",EnumUtil.RequestCode.SUCCESS.msg);
        result.put("data",data);
        return result;
    }

    /**
     * 请求成功(需要返回JSON数据,方便请求方使用,返回JSONString串的话会有很多转义字符“/”)
     * 阿里巴巴的JSON包还是挺厉害的
     * @param data 返回数据
     * @return
     */
    public static Map<String,Object> SUCCESSJSON(Object data){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",EnumUtil.RequestCode.SUCCESS.msg);
        result.put("data", JSON.parse(data.toString()));
        return result;
    }

    /**
     * 请求成功,用户自定义msg
     * @param msg 用户自定义成功提示信息(比如:①用户添加成功②权限修改成功)
     * @param data 返回数据
     * @return
     */
    public static Map<String,Object> SUCCESS(String msg,Object data){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",msg);
        result.put("data",data);
        return result;
    }

    /**
     * 请求成功,用户自定义msg(需要返回JSON数据,方便请求方使用,返回JSONString串的话会有很多转义字符“/”)
     * 阿里巴巴的JSON包还是挺厉害的
     * @param msg 用户自定义成功提示信息(比如:①用户添加成功②权限修改成功)
     * @param data 返回数据
     * @return
     */
    public static Map<String,Object> SUCCESSJSON(String msg,Object data){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",msg);
        result.put("data",JSON.parse(data.toString()));
        return result;
    }

    /**
     * 请求成功,用户自定义msg,不需要返回数据
     * @param msg 用户自定义成功提示信息(比如:①用户删除成功②商品删除成功)
     * @return
     */
    public static Map<String,Object> SUCCESS(String msg){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SUCCESS.code);
        result.put("msg",msg);
        return result;
    }

    /**
     * 资源未找到
     * @return
     */
    public static Map<String,Object> NOTFOUND(){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.NOT_FOUND.code);
        result.put("msg",EnumUtil.RequestCode.NOT_FOUND.msg);
        return result;
    }

    /**
     * 资源未找到,用户自定义msg
     * @param msg 用户自定义资源未找到提示信息(比如:①查询的订单不存在②查询的用户不存在)
     * @return
     */
    public static Map<String,Object> NOTFOUND(String msg){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.NOT_FOUND.code);
        result.put("msg",msg);
        return result;
    }

    /*---------------------------------------------------------逻辑上执行失败----------------------------------------------------------------*/
    /**
     * 执行失败
     * @return
     */
    public static Map<String,Object> FAIL(){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.FAIL.code);
        result.put("msg",EnumUtil.RequestCode.FAIL.msg);
        return result;
    }

    /**
     * 执行失败,用户自定义msg
     * @param msg 用户自定义执行失败提示信息(比如:①普通用户查看VIP资源②普通用户登录管理员系统)
     * @return
     */
    public static Map<String,Object> FAIL(String msg){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.FAIL.code);
        result.put("msg",msg);
        return result;
    }
    /*---------------------------------------------------------逻辑上执行失败----------------------------------------------------------------*/

    /*---------------------------------------------------------程序报错----------------------------------------------------------------*/
    /**
     * 请求失败
     * @return
     */
    public static Map<String,Object> SERVERERROR(){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SERVER_ERROR.code);
        result.put("msg",EnumUtil.RequestCode.SERVER_ERROR.msg);
        return result;
    }

    /**
     * 请求失败,用户自定义msg
     * @param msg 用户自定义失败提示信息(比如:①用户删除失败②权限添加失败)
     * @return
     */
    public static Map<String,Object> SERVERERROR(String msg){
        Map<String,Object> result = new HashMap<>();
        result.put("code",EnumUtil.RequestCode.SERVER_ERROR.code);
        result.put("msg",msg);
        return result;
    }
    /*---------------------------------------------------------程序报错----------------------------------------------------------------*/

}
这个也不全,老规矩,我打个样,你们自己补充,后续我用到新的也会更新进来
### 通用返回 JSON 的实现及示例 在开发过程中,为了统一接口返回格式,通常会设计一个通用返回来封装 API 响应的数据。这种做法不仅提高了代码的可维护性和一致性,还便于前端解析和处理。 以下是基于 Java 和 Go 两种语言的设计方案: --- #### **Java 中的通用返回** 在 Java 中,可以创建一个泛型作为通用返回对象。该包含三个主要字段:`code` 表示状态码;`message` 描述信息;`data` 存储实际业务数据[^1]。 ```java // 定义通用返回 public class Result<T> { private int code; // 状态码 private String message; // 提示消息 private T data; // 数据部分 public Result() {} public Result(int code, String message) { this.code = code; this.message = message; } public Result(int code, String message, T data) { this.code = code; this.message = message; this.data = data; } // Getter and Setter 方法省略... @Override public String toString() { return JSONObject.toJSONString(this); } } ``` 通过上述方式,可以在控制器方法中直接返回实例。例如,在成功时调用 `new Result<>(200, "操作成功", data)`,而在失败时则返回错误提示 `new Result<>(500, "服务器异常")`。 --- #### **Go 中的通用返回** 对于 Go 语言而言,同样可以通过定义结构体的方式构建似的机制。下面是一个简单的例子,展示了如何利用 Gin 框架配合自定义返回型完成这一目标[^2]。 ```go package response import ( "net/http" "github.com/gin-gonic/gin" ) // 统一返回结构体 type Response struct { Code int `json:"code"` // HTTP 状态码映射到内部逻辑编码 Message string `json:"msg"` // 错误或者成功的描述文字 Data interface{} `json:"data"` // 动态存储任意型的业务数据 } func Success(c *gin.Context, data interface{}) { c.JSON(http.StatusOK, &Response{ Code: http.StatusOK, Message: "Success", Data: data, }) return } func Error(c *gin.Context, err error) { c.JSON(http.StatusInternalServerError, &Response{ Code: http.StatusInternalServerError, Message: err.Error(), Data: nil, }) return } ``` 以上代码片段提供了两个辅助函数用于简化 Controller 层中的写法——当一切正常运行完毕之后只需调用一次 `response.Success()` 即可向客户端传递所需的结果集;反之如果发生任何预料之外的情况,则借助于 `response.Error()` 来反馈具体问题所在位置给调用方知道。 --- #### **总结** 无论是哪种编程环境下的解决方案都遵循着相同的原则即保持清晰简洁的同时兼顾灵活性以便适应未来可能存在的需求变更情况。同时注意合理运用面向对象特性以及良好的命名习惯有助于提升整体项目的质量水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值