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: "操作成功"
}

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

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

相关文章

二市在度低开,连续11个交易日低开,后市如何走?

今天的A股&#xff0c;让人愣住了&#xff0c;你知道是为什么吗&#xff1f;盘面上出现2个耐人寻味的重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市再度低开&#xff0c;连续11个交易日低开&#xff0c;让很多人愣住了。别慌&#xff01;汽车、军工板块大涨&#x…

MYSQL存储引擎InnoDB, MyISAM简介

MYSQL存储引擎 在开始谈到mysql存储引擎之前&#xff0c;我们应该知道或者了解存储引擎是什么&#xff0c;存储引擎是为了解决什么样的问题的。 在mysql中&#xff0c;存储引擎是处理不同表类型SQL操作的MySQL组件&#xff0c;同时MySQL服务器采用可插拔的存储引擎架构&#x…

XLua 原理分析 三

前面已经介绍了Lua与C#的基础通信原理&#xff0c;和Wrap中间文件的作用。有了前面2篇的基础&#xff0c;大概已经能搞清这块的原理。 为了加深对这块的印象&#xff0c;这里开始正式分析Xlua中的Lua和C#的通信。 一、Lua如何调用CS的过程 lua的初始化代码&#xff1a; pri…

乌班图下的vscode粘贴代码后一直在输入CTRLV命令

最近在VMware中使用vscode开发c程序中&#xff0c;拷贝一段代码后&#xff0c;代码界面一直输入CTRLV命令&#xff0c;导致乌班图桌面死掉&#xff0c;无法操作、 解决方法&#xff1a; 1、强制重启。长按电源按钮强制关机&#xff0c;然后再次开机。 2、使用命令行界面。同时…

1.ESP32-CAM 下使用 ESP-IDF 打开摄像头

主要资料&#xff1a; 乐鑫官方编程指南 ESP-IDF 编程指南安信可官方模块页 安信可-ESP32-CAM摄像头开发板官方使用教程 安信可ESP32-CAM摄像头开发demo–局域网拍照、实时视频、人脸识别 &#xff08;开发环境是Linux&#xff09; 本文目标是在 Windows 下跑通摄像头 hello …

快手电商Android一面凉经(2024)

快手电商Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《快手电商Android一面凉经(2024)》。 面试职位: Android工程师 技术一面 面试形式…

python count返回什么

描述 count() 方法用于统计字符串中某个子字符串出现的次数&#xff0c;可选参数为开始搜索与结束搜索的位置索引。 语法 count() 方法语法&#xff1a; S.count(sub[,start0[,endlen(S)]]) 参数 sub -- 搜索的子字符串。 S -- 父字符串。 start -- 可选参数&#xff0c;…

【数据结构】哈希表的模拟实现

文章目录 1. 哈希的概念2. 哈希表与哈希函数2.1 哈希冲突2.2 哈希函数2.3 哈希冲突的解决2.3.1 闭散列&#xff08;线性探测&#xff09;2.3.2 闭散列的实现2.3.3 开散列(哈希桶)2.3.4 开散列的实现 2.4 开散列与闭散列比较 1. 哈希的概念 在我们之前所接触到的所有的数据结构…

FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 推荐课程列表 逻辑很简单 点赞数 > 500 那么符合要求的课程是&#xff1a; def get_like_course(db: Session):"""获取推荐课程…

一番赏小程序搭建,线上一番赏市场

一番赏作为一个经久不衰的潮流市场&#xff0c;一直流行于消费者市场中。一番赏商品拥有不同系列&#xff0c;涵盖了热门动漫、漫画、影视等主题&#xff0c;商品包含了手办等周边商品&#xff0c;具有非常大的收藏价值。相比于其他潮玩模式&#xff0c;一番赏的性价比更高&…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

GC(垃圾收集)简析:为什么Java需要它?

GC&#xff08;垃圾收集&#xff09;简析&#xff1a;为什么Java需要它&#xff1f; 1、什么是GC&#xff1f;2、为什么Java需要GC&#xff1f;3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、什么是GC&#xff1f; GC&#xff…

黄果树瀑布

早上我们按计划6点吃饭&#xff0c;可是酒店没水了&#xff0c;等我们吃完饭已经近七点 &#xff0c;到景区已经7点多了。景区入口的人特别多&#xff0c;验过包裹&#xff0c;只刷脸就进去了。排队坐大巴&#xff0c;向左是陡坡塘和七星桥。 第一站陡坡塘&#xff0c;服务中心…

synergy Ubuntu 18 和Windows 配置

下载链接 Windows 版本 https://altushost-swe.dl.sourceforge.net/project/synergy-stable-builds/v1.8.8-stable/synergy-v1.8.8-stable-Windows-x64.msi?viasf1Ubuntu 18 版本 sudo apt-get install synergy配置方式 我这边配置需求是 笔记本电脑&#xff08;Windows系统…

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统&#xff0c;旨在最大化一个组织的适应性。关于适应性&#xff08;或者敏捷性&#xff0c;也就是敏捷开发的初衷&#xff09;我们是指优化&#xff1a; 以相对低的成本改变方向的能力&#xff0c;主要是基于通过频繁交付产生的探索。从…

基于微信小程序的搬家服务系统(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 涉及技术栈&#xff1a;SpringBoot、Vue、SSM、H…

【PostgreSQL 16】专栏日常

本专栏从 3 个月前开始着手准备&#xff0c;利用周末及节假日的时间来整理。 ldczzDESKTOP-HVJOUVN MINGW64 ~/mypostgres (dev) $ git lg |tee * 7a7f468 - (HEAD -> dev, origin/main, origin/dev, main) 完成服务端编程的初步整理 (6 minutes ago) <Laven Liu> * …

将手机作为服务器运行docker服务

前言 目前手机的配置并不低&#xff0c;即使是2019年生产的一加七Pro&#xff0c;配置也有12256&#xff0c;CPU是骁龙855&#xff0c;作为服务器运行着配置绰绰有余了&#xff0c;二手的价格现在是400左右也能接受。相对于是自带ups电源的便携低耗docker服务器&#xff0c;还…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十一章 Linux内核定时器

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十二章 LED驱动实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…