当前位置: 首页 > news >正文

Spring Cloud微服务项目统一封装数据响应体

        在微服务架构下,处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发,统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体,并分享一些最佳实践。

为什么要统一封装数据响应体?

        在微服务架构中,服务之间的接口可能会不断变化,这会导致前端和其他服务需要不断调整以适应这些变化。统一封装数据响应体可以带来以下好处:

  • 一致性:所有服务返回的数据结构一致,前端可以无需关心具体的服务实现,简化了开发和调试。
  • 可维护性:统一的响应体格式使得后期对接口的修改和扩展更为简便。
  • 增强可读性:标准化的响应体使得接口文档更加清晰和易于理解。
  • 错误处理:通过统一的响应体可以更方便地处理和返回错误信息。

前置条件

        在开始封装数据响应体前,博主希望你已经创建了一个Spring Cloud 微服务项目。关于Spring Cloud 微服务项目搭建,请参考:Spring Cloud微服务项目搭建

1.定义统一响应体的结构

        首先,需要定义一个统一的响应体结构。这个结构一般包括以下几个部分: 

  1. 状态码(code):表示请求的处理结果,通常为数字类型,例如 200 表示成功,500 表示服务器错误;
  2. 消息(message):可选字段,用于描述状态码的具体含义或错误信息。
  3. 数据(data):实际的数据内容,通常是接口返回的业务数据。对于无数据返回的接口,这部分可以为空。

         1.1.定义状态码

        自定义状态码可以有效帮助我们区分请求处理的结果,以下是博主自定义的一些状态码:

/* ResultCode.java 文件 */package enums;import lombok.AllArgsConstructor;
import lombok.Getter;@Getter
@AllArgsConstructor
public enum ResultCode {/*** 成功状态码*/SUCCESS(2000, "操作成功"),/*** 失败状态码*/FAILURE(5000, "操作失败"),/*** 4001-4009 用户信息类错误*/USER_INFO_ERROR(4001, "用户名或密码错误"),TOKEN_ERROR(4002, "登录状态已过期"),UNDEFINED_TOKEN(4003, "Token 无效"),SYSTEM_ERROR(9999, "系统错误");private final Integer code;private final String msg;
}

        1.2.封装响应实体

        拥有了请求状态码后,我们便可以根据自己的需求,自定义封装一些方法,便于在代码中调用:

/* Result.java 文件 */package model;import enums.ResultCode;
import lombok.Data;@Data
public class Result<T> {private int code;private String msg;private T data;/*** 请求成功 ==> 无返回数据*/public static Result<Void> SUCCESS() {Result<Void> result = new Result<>();result.setCode(ResultCode.SUCCESS.getCode());result.setMsg(ResultCode.SUCCESS.getMsg());return result;}/*** 请求成功 ==> 有返回数据*/public static <V> Result<V> SUCCESS(V data) {Result<V> result = new Result<>();result.setCode(ResultCode.SUCCESS.getCode());result.setMsg(ResultCode.SUCCESS.getMsg());result.data = data;return result;}/*** 请求失败 ==> 客户端错误:用户名或密码错误*/public static  Result<Void> USER_INFO_ERROR() {Result<Void> result = new Result<>();result.setCode(ResultCode.USER_INFO_ERROR.getCode());result.setMsg(ResultCode.USER_INFO_ERROR.getMsg());return result;}/*** 请求失败 ==> 客户端错误:登录状态已过期*/public static Result<Void> TOKEN_ERROR() {Result<Void> result = new Result<>();result.setCode(ResultCode.TOKEN_ERROR.getCode());result.setMsg(ResultCode.TOKEN_ERROR.getMsg());return result;}/*** 请求失败 ==> 客户端错误:Token 无效*/public static Result<Void> UNDEFINED_TOKEN() {Result<Void> result = new Result<>();result.setCode(ResultCode.UNDEFINED_TOKEN.getCode());result.setMsg(ResultCode.UNDEFINED_TOKEN.getMsg());return result;}/*** 请求失败*/public static Result<Void> FAILURE() {Result<Void> result = new Result<>();result.setCode(ResultCode.FAILURE.getCode());result.setMsg(ResultCode.FAILURE.getMsg());return result;}
}

2.在接口处使用Result包装响应体

        如果不出意外的话,你访问这个接口时,会得到如下的请求数据:

{code: "2000",data: null,message: "操作成功"
}

相关文章:

Spring Cloud微服务项目统一封装数据响应体

在微服务架构下&#xff0c;处理服务之间的通信和数据一致性是一个重要的挑战。为了提高开发效率、保证数据的一致性及简化前端开发&#xff0c;统一封装数据响应体是一种非常有效的实践。本文博主将介绍如何在 Spring Cloud 微服务项目中统一封装数据响应体&#xff0c;并分享…...

java算法day20

java算法day20 701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点108 将有序数组转换为二叉搜索树 本次的题目都是用递归函数的返回值来完成&#xff0c;多熟悉这样的用法&#xff0c;很方便。 其实我感觉&#xff0c;涉及构造二叉树的题目&#xff0c;用递归函数的返回值…...

web自动化测试-python+selenium+unitest

文章目录 Web自动化测试工具1. 主流的Web自动化测试工具2. Selenium家族史 Web自动化测试环境搭建基于Python环境搭建示例&#xff1a;通过程序启动浏览器&#xff0c;并打开百度首页&#xff0c;暂停3秒&#xff0c;关闭浏览器 页面元素定位1. 如何进行元素定位&#xff1f;2.…...

LeetCode题练习与总结:组合两个表--175

一、题目描述 SQL Schema > Pandas Schema > 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主…...

数据结构:二叉搜索树(简单C++代码实现)

目录 前言 1. 二叉搜索树的概念 2. 二叉搜索树的实现 2.1 二叉树的结构 2.2 二叉树查找 2.3 二叉树的插入和中序遍历 2.4 二叉树的删除 3. 二叉搜索树的应用 3.1 KV模型实现 3.2 应用 4. 二叉搜索树分析 总结 前言 本文将深入探讨二叉搜索树这一重要的数据结构。二…...

深入理解Prompt工程

前言&#xff1a;因为大模型的流行&#xff0c;衍生出了一个小领域“Prompt工程”&#xff0c;不知道大家会不会跟小编一样&#xff0c;不就是写提示吗&#xff0c;这有什么难的&#xff0c;不过大家还是不要小瞧了Prompt工程&#xff0c;现在很多大模型把会“Prompt工程”作为…...

代码随想录算法训练营day6 | 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1.两数之和

文章目录 哈希表键值 哈希函数哈希冲突拉链法线性探测法 常见的三种哈希结构集合映射C实现std::unordered_setstd::map 小结242.有效的字母异位词思路复习 349. 两个数组的交集使用数组实现哈希表的情况思路使用set实现哈希表的情况 202. 快乐数思路 1.两数之和思路 总结 今天是…...

vue3 vxe-table 点击行,不显示选中状态,加上设置isCurrent: true就可以设置选中行的状态。

1、上个图&#xff0c;要实现这样的&#xff1a; Vxe Table v4.6 官方文档 2、使用 row-config.isCurrent 显示高亮行&#xff0c;当前行是唯一的&#xff1b;用户操作点击选项时会触发事件 current-change <template><div><p><vxe-button click"sel…...

Linux没有telnet 如何测试对端的端口状态

前段时间有人问uos没有telnet&#xff0c;又找不到包。 追问了一下为什么非要安装telnet&#xff0c;答复是要测试对端的端口号。 这里简单介绍一下&#xff0c;测试端口号的方法有很多&#xff0c;telent只是在windows上经常使用&#xff0c;linux已很少安装并使用该命令&…...

花几千上万学习Java,真没必要!(二十九)

1、基本数据类型包装类&#xff1a; 测试代码1&#xff1a; package apitest.com; //使用Integer类的不同方法处理整数。 //将字符串转换为整数&#xff08;parseInt&#xff09;和Integer对象&#xff08;valueOf&#xff09;&#xff0c; //将整数转换回字符串&#xff08;…...

C#如何引用dll动态链接库文件的注释

1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意&#xff1a;XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下&#xff0c;之后又将XML文件复制到相同的目录下&#xff0c;需要删除引用&am…...

WordPress原创插件:自定义文章标题颜色

插件设置截图 文章编辑时&#xff0c;右边会出现一个标题颜色设置&#xff0c;可以设置为任何颜色 更新记录&#xff1a;从输入颜色css代码&#xff0c;改为颜色选择器&#xff0c;更方便&#xff01; 插件免费下载 https://download.csdn.net/download/huayula/89585192…...

Unity分享:继承自MonoBehaviour的脚步不要对引用类型的字段在声明时就初始化

如果某些字段在每个构造函数中都要进行初始化&#xff0c;很多人都喜欢在字段声明时就进行初始化&#xff0c;对于一个非继承自MonoBehaviour的脚步&#xff0c;这样做是没有问题的&#xff0c;然而继承自MonoBehaviour后就会造成内存的浪费&#xff0c;为什么呢&#xff1f;因…...

.NET Core中如何集成RabbitMQ

在.NET Core中集成RabbitMQ主要涉及到几个步骤&#xff0c;包括安装RabbitMQ的NuGet包、建立连接、定义队列、发送和接收消息等。下面是一个简单的指南来展示如何在.NET Core应用程序中集成RabbitMQ。 目录 1. 安装RabbitMQ.Client NuGet包 2. 建立连接 3. 定义队列 4. 发…...

嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化:智能物流管理系统设计思路流程(附代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. STM32微控制器与传感器代码 代码讲解 2. MQTT Broker设置 3. 数据接收与处理 代码讲解 4. 数据存储与分析 5. 数据分析与可视化 代码讲解 6. 数据可视化 项目总结 项目概述 随着电子商务的快…...

.net core docker部署教程和细节问题

在.NET Core中实现Docker一键部署&#xff0c;通常涉及以下几个步骤&#xff1a;编写Dockerfile以定义镜像构建过程、构建Docker镜像、运行Docker容器&#xff0c;以及&#xff08;可选地&#xff09;使用自动化工具如Docker Compose或CI/CD工具进行一键部署。以下是一个详细的…...

php数据库链接

Php超全局变量 GET 和 POST 都创建一个数组&#xff08;例如 array&#xff08; key1 > value1&#xff0c; key2 > value2&#xff0c; key3 > value3&#xff0c; ...&#xff09;&#xff09;。此数组包含键/值对&#xff0c;其中 键是表单控件的名称&#xff0c;…...

python+vue3+onlyoffice在线文档系统实战20240726笔记,左侧菜单实现和最近文档基本实现

解决右侧高度过高的问题 解决方案&#xff1a;去掉右侧顶部和底部。 实现左侧菜单 最近文档&#xff0c;纯粹文档 我的文档&#xff0c;既包括文件夹也包括文件 共享文档&#xff0c;别人分享给我的 基本实现代码&#xff1a; 渲染效果&#xff1a; 简单优化 设置默认菜…...

vue中的nexttrick

Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它允许开发者通过声明式的数据绑定来构建网页应用。在 Vue 中&#xff0c;nextTick 是一个非常重要的 API&#xff0c;它用于延迟回调的执行&#xff0c;直到下次 DOM 更新循环之后。 为什么使用 nextTick&#xff1f; …...

【BUG】已解决:ModuleNotFoundError: No module named ‘requests‘

ModuleNotFoundError: No module named ‘requests‘ 目录 ModuleNotFoundError: No module named ‘requests‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&a…...

C++/Qt项目内存问题排查:除了Valgrind,这些工具和技巧你也该知道

C/Qt项目内存问题排查&#xff1a;除了Valgrind&#xff0c;这些工具和技巧你也该知道 在开发中等复杂度的Qt桌面或嵌入式应用时&#xff0c;内存问题往往是最难缠的"隐形杀手"。我曾参与过一个医疗影像处理系统的开发&#xff0c;项目后期突然出现随机崩溃&#xff…...

Linux系统下英特尔Arc显卡驱动安装与AI推理性能调优实战

1. 英特尔Arc显卡在Linux下的独特优势 第一次在Linux系统上折腾英特尔Arc显卡时&#xff0c;我完全被它的性价比震惊了。作为长期使用N卡的开发者&#xff0c;原本只是抱着试试看的心态&#xff0c;结果发现这套组合在AI推理任务中表现远超预期。不同于Windows系统开箱即用的体…...

终极指南:CodeGuide数据备份与恢复策略,保障Java开发项目安全无忧

终极指南&#xff1a;CodeGuide数据备份与恢复策略&#xff0c;保障Java开发项目安全无忧 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总&#xff0c;旨在为大家提供一个清晰详细的学习教程&#xff0c;侧重点更倾向…...

Simulink里三种TD微分器怎么选?用带噪声的正弦信号实测给你看(附模型)

Simulink中三种TD微分器的工程选型实战指南 从实验室到产线&#xff1a;为什么TD微分器如此重要 在电机控制、机器人导航和工业自动化领域&#xff0c;工程师们经常面临一个共同挑战&#xff1a;如何从带有噪声的传感器信号中准确提取速度信息。编码器、加速度计等传感器输出的…...

科技早报晚报|2026年5月15日:本地大表分析、零 ETL 远程搜索与去中心化监控,今晚更值得跟进的 3 个技术机会

科技早报晚报&#xff5c;2026年5月15日&#xff1a;本地大表分析、零 ETL 远程搜索与去中心化监控&#xff0c;今晚更值得跟进的 3 个技术机会 一句话导读&#xff1a;上午那篇我已经写了空间感知、设备实验室和视频代理&#xff0c;今晚这轮我刻意换到另一条更贴近真实工程预…...

tcpdive性能评估报告:CPU占用率与QPS影响分析终极指南

tcpdive性能评估报告&#xff1a;CPU占用率与QPS影响分析终极指南 【免费下载链接】tcpdive A TCP performance profiling tool. 项目地址: https://gitcode.com/gh_mirrors/tc/tcpdive tcpdive作为一款专业的TCP性能分析工具&#xff0c;在生产环境中的性能表现至关重要…...

告别手动标注!用TableBank数据集+Detectron2,快速搞定表格检测模型训练

零基础实战&#xff1a;基于TableBank与Detectron2的工业级表格检测方案 在金融报表解析、医疗档案数字化等场景中&#xff0c;表格检测作为文档智能处理的第一道关卡&#xff0c;其准确性直接影响后续信息提取的成败。传统人工标注数据的方式不仅成本高昂&#xff0c;更面临版…...

Parabolic:简单高效的免费视频下载工具,yt-dlp图形界面终极方案

Parabolic&#xff1a;简单高效的免费视频下载工具&#xff0c;yt-dlp图形界面终极方案 【免费下载链接】Parabolic Download web video and audio 项目地址: https://gitcode.com/GitHub_Trending/pa/Parabolic 还在为寻找一款既强大又易用的视频下载工具而烦恼吗&…...

架构设计经验分享:从方法论到落地的完整实践

写在前面 “架构"是技术圈里被滥用最严重的词之一。很多人一说架构就开始画框图、讲中间件、列技术栈&#xff0c;但问一句"你这个架构解决了什么问题”&#xff0c;答不上来。 我做架构这些年&#xff0c;最深的体会是&#xff1a;架构不是技术选型的堆砌&#xff0…...

如何用LRCGET歌词下载神器一键解决数千首离线音乐歌词同步难题

如何用LRCGET歌词下载神器一键解决数千首离线音乐歌词同步难题 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否拥有一个庞大的离线音乐库&#x…...