SpringBoot 项目统一 API 响应结果封装示例

在Spring Boot项目中,统一 API 响应结果封装是一种常用的技术实践,旨在提高开发效率、降低代码重复率,并提供一致的API响应格式,从而简化前后端交互和错误处理。

文章目录

封装内容

响应结果封装是将后端服务返回的响应数据按照统一的格式进行封装,这个格式通常包括状态码、状态信息(或称为消息)、返回数据等关键信息。

  • 状态码(Code):表示请求的处理结果,如成功、失败、特定错误等。状态码通常是一组预定义的整数或枚举值。
  • 状态信息/消息(Message):与状态码相对应的文本描述,用于提供关于请求处理结果的更多信息。
  • 返回数据(Data):实际业务处理的结果数据,其类型可能因API而异。

此外,有些封装还会包含时间戳、请求ID等附加信息,以便于日志追踪和问题排查。

封装示例

1、Result

java 复制代码
package com.wen.data;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 统一 API 响应结果封装
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {

    private int code;

    private String message;

    private T data;

    public Result<T> setCode(ResultCode resultCode) {
        this.code = resultCode.code;
        this.message = resultCode.message;
        return this;
    }

    public Result<T> setMessage(String message) {
        this.message = message;
        return this;
    }

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

2、ResultCode

java 复制代码
package com.wen.data;

/**
 * 响应码枚举
 */

public enum ResultCode {

    // 这里可以根据多个场景设置不同的响应码,供前端判断问题并进行解释
    SUCCESS(1,"SUCCESS"),

    FAIL(400,"FAIL"),

    NOT_FOUND(401,"interface not found"),

    ERROR(500,"System Exception!");

    public int code;

    public String message;

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

3、ResultGenerator

java 复制代码
package com.wen.data;

/**
 * 响应结果生成
 */

public class ResultGenerator {

    public static Result<?> genSuccessResult(){
        return new Result<>().setCode(ResultCode.SUCCESS);
    }

    public static Result<?> genSuccessResult(Object data){
        return new Result<>().setCode(ResultCode.SUCCESS).setData(data);
    }

    public static Result<?> genFailResult(String message){
        return new Result<>().setCode(ResultCode.FAIL).setMessage(message);
    }

    public static Result<?> genSpecialResult(ResultCode resultCode, String message){
        return new Result<>().setCode(resultCode).setMessage(message);
    }
}

4、TestController

java 复制代码
package com.wen.controller;

import com.wen.data.Result;
import com.wen.data.ResultGenerator;
import com.wen.dto.TbUser;
import com.wen.service.TestService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @Autowired
    private TestService testService;

    @GetMapping("/select")
    public Result<?> selectUserByPage(
    				@Param("pageSize") Integer pageSize, 
    				@Param("pageNumber") Integer pageNumber){
    	// 生成结果
        return ResultGenerator.genSuccessResult(testService.selectUserByPage(pageSize, pageNumber));
    }
}

5、生成结果

json 复制代码
{
    "code": 1,
    "message": "SUCCESS",
    "data": "2024-07-19"
}
相关推荐
WeiXin_DZbishe31 分钟前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
架构技术专栏1 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
vx_bisheyuange1 小时前
基于SpringBoot的体育商品推荐系统
spring boot·毕业设计
别动我齐刘海2 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈2 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan2 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
Wx-bishekaifayuan3 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
code2cat3 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe3 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码3 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口