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

news2024/9/20 17:00:02

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

文章目录

    • 封装内容
    • 封装示例
      • 1、Result
      • 2、ResultCode
      • 3、ResultGenerator
      • 4、TestController
      • 5、生成结果

封装内容

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

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

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

封装示例

1、Result

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

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

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

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、生成结果

{
    "code": 1,
    "message": "SUCCESS",
    "data": "2024-07-19"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MeterSphere技术分享:UI自动化测试的必要性与解决方案

UI自动化测试体系的建设价值遵循测试金字塔模型&#xff0c;该模型建议测试人员在不同层次上编写和执行测试。UI测试需要编写和设计测试脚本、执行完整的应用程序&#xff0c;并模拟用户与应用程序交互&#xff0c;因此UI测试的测试速度相对较慢。但是UI测试的业务覆盖很高&…

【STL】stack,deque,queue 基础,应用与操作

stack 1.stack相关介绍 stack&#xff08;栈&#xff09; 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构&#xff0c;意味着最后插入的数据最先被移除。C 中的栈是通过容器适配器实现的&#xff0c;底层默认使用 deque&#xff08;双端队列&am…

数字电子技术-数值比较器

目录 数值比较器 1、1位二进制数值比较器 多位数值比较器 4位数值比较器74LS85(TTL型) 74LS85数值比较器的使用说明 数值比较器 Digital Comparator,又称数字比较器&#xff0c;用以对两个数字的大小或是否相等进行比较的逻辑电路。 1、1位二进制数值比较器 A和B只能取值…

硬盘数据恢复必备:4 款强大硬盘数据恢复软件推荐!

在数字化的时代&#xff0c;我们的生活和工作越来越离不开电脑&#xff0c;而硬盘作为重要的数据存储设备&#xff0c;一旦出现数据丢失的情况&#xff0c;往往会给我们带来极大的困扰。别担心&#xff0c;今天就为大家推荐四款强大的硬盘数据恢复软件&#xff0c;帮助你轻松找…

六西格玛绿带培训多少钱?从授“鱼”到授“渔”

六西格玛作为一种全球公认的质量管理方法&#xff0c;其影响力日益扩大&#xff0c;而六西格玛绿带培训作为这一体系中的关键环节&#xff0c;更是吸引了众多希望在职场上脱颖而出的专业人士。本文&#xff0c;深圳天行健企业管理咨询公司将从多个维度深入探讨“六西格玛绿带培…

巴菲特的长期投资策略:新投资者实现财务自由的启示

在投资界&#xff0c;沃伦巴菲特的名字几乎无人不晓。作为伯克希尔哈撒韦公司的董事长和首席执行官&#xff0c;巴菲特以其卓越的投资智慧和长期价值增长策略&#xff0c;成为了全球投资者的偶像。巴菲特的成功不仅仅是因为他的财富&#xff0c;更在于他对投资的深刻理解和对财…

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词&#xff1a; Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述&#xff1a; Linux 磁盘管理体系通过“挂载点”概念替代了 Windows 中的“分区”概念&#xff0c;将硬盘部分以文…

如何保养净水器

俗话说&#xff0c;“三分用&#xff0c;七分养”&#xff0c;这句话道出了家电这类消费品使用寿命的秘诀。家电的长久运行并不仅仅依赖于其出厂时的品质&#xff0c;更与我们日常的维护保养息息相关。虽然行业标准或制造商通常会规定家电的推荐使用年限&#xff0c;但在许多家…

【计算机网络】传输层协议UDP

目录 一、端口号1.1 端口号范围划分1.2 认识知名端口号 二、UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的缓冲区2.4 UDP使用注意事项2.5 基于UDP的应用层协议 一、端口号 传输层协议负责数据的传输&#xff0c;从发送端到接收端。端口号标识一个主机上进行通信的不同的应用…

Go语言的io输入输出流

Go语言的输入输出流不如其他语言那么直观&#xff0c;由于是通过实现接口方法的隐式继承所以比较抽象&#xff0c;今天具体介绍一下go语言的输入输出流。 go语言输入输出在io库中&#xff0c;使用Reader接口&#xff0c;如下&#xff1a; type Reader interface {Read(p []by…

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk&#xff0c;网址及官方说明文档如下&#xff1a; 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图&#xff1a; 下载完后就要编译了。 1.下载VS&#xff0c;我的开发环境是 visual studio 2019 2. 下载CMake&#xff…

UNRAID系统忘记密码解决办法

前言 unraid系统自己通过命令修改密码以后&#xff0c;怎么也进不去了。 这次带来如何重置密码 操作

1-2.Jetpack 之 Navigation 跳转编码模板

一、Navigation 1、Navigation 概述 Navigation 是 Jetpack 中的一个重要成员&#xff0c;它主要是结合导航图&#xff08;Navigation Graph&#xff09;来控制和简化 Fragment 之间的导航&#xff0c;即往哪里走&#xff0c;该怎么走 2、Navigate 引入 在模块级 build.gra…

《关节机械臂:智能仓库的高效助手》

关节机械臂作为一种高度精密的机器设备&#xff0c;在现代制造工厂的智能仓库系统中发挥着至关重要的作用。其设计初衷便是精准地模拟人类手臂在订单拣选操作中的各种运动&#xff0c;以实现高效、准确的物流作业。 这些多功能的机器人由多个关节巧妙组合而成&#xff0c;通常拥…

人工智能【AI】:未来的驱动力

在21世纪&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动技术进步和创新的关键力量。AI不仅仅是科幻小说中的概念&#xff0c;它已经渗透到我们日常生活的方方面面&#xff0c;从智能手机的语音助手到复杂的医疗诊断系统&#xff0c;AI的应用无处不在。 人工智能…

KG Structure as Prompt:利用知识图谱构建Prompt,提高大模型对因果关系的理解

KG Structure as Prompt&#xff1a;利用知识图谱构建Prompt&#xff0c;提高大模型对因果关系的理解 秒懂大纲提出背景解法拆解创意视角中文意译 论文&#xff1a;Knowledge Graph Structure as Prompt: Improving Small Language Models Capabilities for Knowledge-based Ca…

Mybatis框架映射---代码实现(XML配置以及注解形式)

目录 一. 映射关系 1 对 1-映射方式 1.通过xml文件实现映射的一对一关系 总结 &#xff1a; 2.通过注解的方式来实现下面的 1 对 1 的映射关系&#xff0c;实现级联查询 总结&#xff1a; 二. 映射关系多对一 1.通过xml文件实现映射的多对一关系 2.通过注解的方式来实现…

PHP发邮件教程:配置SMTP服务器发送邮件?

PHP发邮件的几种方式&#xff1f;如何使用PHP通过SMTP协议发信&#xff1f; PHP作为一种广泛使用的服务器端脚本语言&#xff0c;提供了多种方式来发送邮件。AokSend将详细介绍如何通过配置SMTP服务器来实现PHP发邮件教程的核心内容。 PHP发邮件教程&#xff1a;设置参数 这…

Qt 模型视图(一):概述

文章目录 Qt 模型视图(一):概述1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图(一):概述 ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动…