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

亿级高并发电商项目-- 实战篇 --万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )

 

 

  

专栏:高并发---前后端分布式项目 

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

 IDEA开启Dashboard

普通的IDEA面板只能管理一个服务,而分布式项目中,服务非常多,开启Dashboard可以更方便的管理服务。

在项目路径中的 .idea/workspace.xml 中添加

<component name="RunDashboard"><option name="ruleStates"><list><RuleState><option name="name" value="ConfigurationTypeDashboardGroupingRule" /></RuleState><RuleState><option name="name" value="StatusDashboardGroupingRule" /></RuleState></list></option><option name="configurationTypes"><set><option value="SpringBootApplicationConfigurationType" /></set></option>
</component>

效果如下: 

 

设置统一返回格式 

在前后端分离的项目中,为了方便前后端交互,后端往往需要给前端返回固定的数据格式,但不同的实体类返回格式不同,所以在真实开发中,我们将所有API接口设置返回统一的格式。

 

1、在通用模块创建统一返回结果实体类 

/**
* 统一结果集返回结果
*/
@Data
@AllArgsConstructor
public class BaseResult<T> {// 状态码(成功:200 失败:其他)private Integer code;// 提示消息private String message;// 返回数据private T data;// 构建成功结果public static <T> BaseResult<T> ok() {return new BaseResult(CodeEnum.SUCCESS.getCode(),CodeEnum.SUCCESS.getMessage(), null);}// 构建带有数据的成功结果public static <T> BaseResult<T> ok(T data) {return new BaseResult(CodeEnum.SUCCESS.getCode(),CodeEnum.SUCCESS.getMessage(), data);}
}
/**
* 返回状态码枚举类
*/
@Getter
@AllArgsConstructor
public enum CodeEnum {// 正常SUCCESS(200, "OK");private final Integer code;private final String message;
}

2、修改API模块的控制器方法,所有方法都返回 BaseResult 对象

/**
* 品牌
*/
@RestController
@RequestMapping("/brand")
public class BrandController {// 远程注入@Referenceprivate BrandService brandService;/*** 根据id查询品牌** @param id 品牌id* @return 查询结果*/@GetMapping("/findById")public BaseResult<Brand> findById(Long id) {Brand brand = brandService.findById(id);return BaseResult.ok(brand);}
}

 

 统一异常处理

在前后端分离项目中,系统抛出异常时,不论是自定义异常还是程序异常,都要返回给前端一段JSON数据,以便其对用户进行提示, 且JSON数据的格式和正常结果相同。

 

接下来我们在 通用模块 为整个项目做统一异常处理: 

1、创建自定义异常类 

/**
* 自定义业务异常
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BusException extends
RuntimeException implements Serializable {// 状态码(成功:200,失败:其他)private Integer code;// 异常信息private String message;public BusException(CodeEnum codeEnum){this.code = codeEnum.getCode();this.message = codeEnum.getMessage();}
}

2、创建统一异常处理器

// 统一异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {// 处理业务异常@ExceptionHandler(BusException.class)public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp,BusException e) {BaseResult baseResult = new BaseResult(e.getCode(),e.getMessage(),null);return baseResult;}// 处理系统异常@ExceptionHandler(Exception.class)public BaseResult defaultExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) {e.printStackTrace();BaseResult baseResult = new BaseResult(CodeEnum.SYSTEM_ERROR.getCode(),CodeEnum.SYSTEM_ERROR.getMessage(),null);return baseResult;}
}

3 让所有项目都可以加载全局异常处理类,在通用模块创建文件

resources > META-INF > spring.factories ,添加如下内容:

# 启动时自动扫描全局异常处理类
org.springframework.boot.autoconfigure.Ena
bleAutoConfiguration=com.itbaizhan.shoppin
g_common.exception.GlobalExceptionHandler

 4、修改返回状态码枚举类

/**
* 返回状态码枚举类
*/
@Getter
@AllArgsConstructor
public enum CodeEnum {// 正常SUCCESS(200, "OK"),// 系统异常SYSTEM_ERROR(500, "系统异常"),// 业务异常PARAMETER_ERROR(601, "参数异常");private final Integer code;private final String message;
}

5、修改品牌服务代码

@Service
public class BrandServiceImpl implements BrandService {@Autowiredprivate BrandMapper brandMapper;/*** 根据id查询品牌*/public Brand findById(Long id){if (id == 0){int i = 1/0; // 模拟系统异常}else if (id == -1){throw new BusException(CodeEnum.PARAMETER_ERROR); // 模拟业务异常}return brandMapper.selectById(id);}
}

6、分别访问

   http://localhost:8001/brand/findById?id=1,http://l ocalhost:8001/brand/findById?id=0,http://localhost:8001/b rand/findById?id=-1

查看返回结果

Postman测试接口 

1、双击安装包安装Postman

2、创建请求集合

3、添加请求

4、保存请求到集合,以后可以随时发送该请求 

 

 

相关文章:

亿级高并发电商项目-- 实战篇 --万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )

专栏&#xff1a;高并发---前后端分布式项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、…...

为什么这11道JVM面试题这么重要(附答案)

本文内容整理自 博学谷狂野架构师 运行时数据区都包含什么 虚拟机的基础面试题 程序计数器Java 虚拟机栈本地方法栈Java 堆方法区 程序计数器 程序计数器是线程私有的&#xff0c;并且是JVM中唯一不会溢出的区域&#xff0c;用来保存线程切换时的执行行数 程序计数器&#xff…...

概率统计之概率篇

概率统计之概率篇 一 随机变量及其四种研究方法 为了更深入地研究随机现象&#xff0c;需要把随机试验的结果数量化&#xff0c;也就是要引进随机变量来描述随机试验的结果。 一般地&#xff0c;把表示随机现象的各种结果或描述随机事件的变量叫做随机变量。随机变量通常用大…...

综合项目 旅游网 【5.旅游线路收藏功能】

分析判断当前登录用户是否收藏过该线路当页面加载完成后&#xff0c;发送ajax请求&#xff0c;获取用户是否收藏的标记根据标记&#xff0c;展示不同的按钮样式编写代码后台代码RouteServlet/*** 判断当前登录用户是否收藏过该路线*/ public void isFavorite(HttpServletReques…...

【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件

在ArcGIS Pro工作中&#xff0c;有时候会涉及到工具栏UI的管理&#xff0c;比如&#xff0c;打开模型构建器时&#xff0c;工具栏才会出现新的选项卡(Tab)【ModelBuilder】&#xff0c;工程未做更改&#xff0c;则【保存】按钮显示灰色不可用。 下面以一个小例子来学习一下。 一…...

Spring Boot开发实战——echarts图标填充数据

echarts模块的导入 先看看成品吧&#xff01; 有的图标的数据用了一些计算框架不是直接查数据库所以有点慢。 ok&#xff01;&#x1f603; 上正文&#xff0c;接上节Spring boot项目开发实战——&#xff08;LayUI实现前后端数据交换与定义方法渲染数据&#xff09;讲解了一般…...

李达聪老师:互联网时代的B2B品牌如何塑造

李达聪老师:互联网时代的B2B品牌如何塑造互联网时代企业对企业的品牌如何塑造&#xff1f;互联网时代信息传播速度加快&#xff0c;并且各大新品牌就如春天的竹笋涌出&#xff0c;有的昙花一现&#xff0c;有的趁着时代的红利乘胜追击占领市场&#xff0c;建立品牌。有的成为一…...

javaEE 初阶 — 连接管理机制

文章目录连接管理机制1. 建立连接&#xff08;三次握手&#xff09;2. 断开连接&#xff08;四次挥手&#xff09;TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口&#xff0c;主机B 的空间存储了 主机A 的 ip 和 端口。…...

40个改变你编程技能的小技巧!

40个改变编程技能的小技巧 1、将大块代码分解成小函数 2、今日事今日毕&#xff0c;如果没毕&#xff0c;就留到明天。 如果下班之前还没有解决的问题&#xff0c;那么你需要做的&#xff0c;就是关闭电脑&#xff0c;把它留到明天。 中途不要再想着问题了&#xff01; 3、…...

iTOP3588开发板直连电脑配置方法(无线上网)配置主机IP

首先使用网线连接好主机和开发板&#xff0c;在没有上电的情况下&#xff0c;可以看到以太网显示网络电缆 被拔出&#xff0c;如下图所示&#xff1a; 当开发板上电以后&#xff0c;开发板网卡与笔记本电脑的网卡会连接&#xff0c;如下图所示&#xff1a; 然后右键点击以太网…...

压电陶瓷换能器导纳圆图公式推导及匹配

压电陶瓷换能器的等效电路图如下图所示&#xff0c;分为左右两个部分左边的电容和电阻并联构成了电路的静态支路&#xff0c;被称为静态电容&#xff0c;可以由电表很方便的测量得到&#xff0c;这部分的参数是由换能器的电学参数决定的。右边的串联构成了动态支路&#xff0c;…...

设计模式C++实现11:观察者模式

参考大话设计模式&#xff1b; 详细内容参见大话设计模式一书第十四章&#xff0c;该书使用C#实现&#xff0c;本实验通过C语言实现。 观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式。 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察…...

l1和l2接口如何进行编写?一定要掌握这几个元素

在这个大数据时代&#xff0c;很多地方都需要用到l1和l2接口&#xff0c;l1和l2接口在应用程序与数据库之间起着桥梁的作用&#xff0c;是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业&#xff0c;应用场景的不断拓展&#xff0c;l1和l2接口的发展也兴起&#…...

GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)

目录闲言碎语最终全部效果展示&#xff08;均为10241024512ssp&#xff09;课程总结与理解&#xff08;Path Tracing&#xff09;框架梳理任务一&#xff1a;迁移相关代码任务二&#xff1a;实现path tracing任务三&#xff1a;多线程加速&#xff08;包括其他加速的小trick&am…...

面试题(二十四)数据结构与算法

9.1哈希 请谈一谈&#xff0c;hashCode() 和equals() 方法的重要性体现在什么地方&#xff1f; 考察点&#xff1a;JAVA哈希表 参考回答&#xff1a; Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引&#xff0c;当根据键获取值的时候也会用到这两个方法。…...

【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断

一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式&#xff0c;这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输&#xff0c;每个字符…...

Qt_文件操作

本文包含以下内容: 文件操作 基本介绍:ini文件:csv文件:代码功能文件读写:1.1 读取文件1.1.1按行读取1.1.2整体读取1.2 写入文件2. 文件信息读取3. 文件夹的创建4. 获取文件夹下所有的文件5. 获取文件夹及子文件夹下所有的文件用树的方式在界面显示文件夹目录基本介绍: …...

int和Integer有什么区别?

第7讲 | int和Integer有什么区别&#xff1f; Java 虽然号称是面向对象的语言&#xff0c;但是原始数据类型仍然是重要的组成元素&#xff0c;所以在面试中&#xff0c;经常考察原始数据类型和包装类等 Java 语言特性。 今天我要问你的问题是&#xff0c;int 和 Integer 有什么…...

Axure 9 收录不同效果的制作过程

效果类别 一、默认选中实现单选效果 1、默认选中 点击组件&#xff0c;右键选择selected字样&#xff1b; 2、实现单选效果 点击所有组件&#xff0c;右键选择selected group&#xff0c;填好命名&#xff0c;并设置选中时的组件样式&#xff1b;选择其中一个组件&#xf…...

[Datawhale][CS224W]图神经网络(一)

目录一、导读1.1 当前图神经网络的难点1.2 图神经网络应用场景及对应的相关模型&#xff1a;1.3 图神经网络的应用方向及应用场景二、图机器学习、图神经网络编程工具参考文献一、导读 ​ 传统深度学习技术&#xff0c;如循环神经网络和卷积神经网络已经在图像等欧式数据和信号…...

Llama-3.2V-11B-cot效果实测:同一张图不同提问下的CoT推理路径对比分析

Llama-3.2V-11B-cot效果实测&#xff1a;同一张图不同提问下的CoT推理路径对比分析 1. 工具概览与测试目标 Llama-3.2V-11B-cot是基于Meta多模态大模型开发的专业视觉推理工具&#xff0c;特别针对双卡4090环境进行了深度优化。本次测试将聚焦其核心功能——Chain of Thought…...

大多数加密API都不够用:量化团队真正需要的数据到底是什么?

如果你做过加密相关开发&#xff0c;无论是&#xff1a; 量化交易数据平台研究分析风控系统 你大概率都会经历一个阶段&#xff1a; &#x1f449; API 接了一堆&#xff0c;但始终“不够用”。 常见的一个误区 很多人在刚开始做数据接入时&#xff0c;会觉得&#xff1a; …...

TI DSP BootLoader实战:从Flash分区到安全跳转的工程化指南

1. 为什么需要BootLoader&#xff1f; 想象一下你家的空调遥控器突然需要升级功能&#xff0c;但厂家要求必须拆开外壳用专用设备烧录——这显然不现实。BootLoader就是嵌入式设备的"遥控器升级按钮"&#xff0c;让设备在出厂后仍能通过常规接口&#xff08;如串口、…...

PyTorch 2.8镜像效果展示:使用OpenCV对VideoLDM输出做运动模糊增强处理

PyTorch 2.8镜像效果展示&#xff1a;使用OpenCV对VideoLDM输出做运动模糊增强处理 1. 效果展示概览 在视频生成领域&#xff0c;运动模糊效果是提升视频真实感的关键因素之一。本文将展示如何利用PyTorch 2.8镜像环境&#xff0c;结合OpenCV对VideoLDM生成的原始视频进行运动…...

s2-pro语音合成教程:支持数字/单位/英文缩写智能朗读技巧

s2-pro语音合成教程&#xff1a;支持数字/单位/英文缩写智能朗读技巧 1. 快速了解s2-pro语音合成 s2-pro是Fish Audio开源的专业级语音合成模型镜像&#xff0c;它能将文本转换为自然流畅的语音。这个工具特别适合需要语音播报、有声读物制作、视频配音等场景的用户。 与普通…...

vLLM-v0.17.1实战案例:HuggingFace模型无缝接入+多LoRA高效推理

vLLM-v0.17.1实战案例&#xff1a;HuggingFace模型无缝接入多LoRA高效推理 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)开发&#xff0c;现已发展为社区驱动的开源项目。…...

OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环

OpenClaw任务编排&#xff1a;用Qwen3.5-4B-Claude实现爬虫分析闭环 1. 为什么需要自动化任务编排 去年我接手了一个市场调研项目&#xff0c;需要每周从20多个网站抓取产品价格数据&#xff0c;清洗后生成趋势图表。最初用Python脚本手动Excel处理&#xff0c;每次要花3小时…...

const 变量的存储位置

const 变量的存储位置&#xff1a;不是绝对的只读区&#xff01;这是 C/C 面试/学习高频易错点&#xff0c;核心结论&#xff1a;const 只修饰「只读权限」&#xff0c;不直接决定存储位置&#xff0c;变量放哪里&#xff0c;由变量的「作用域/生命周期」决定。一、分情况讲清楚…...

ColorMemLCD电子纸驱动库:面向LPM013M126A的嵌入式低功耗显示方案

1. ColorMemLCD 库概述ColorMemLCD 是一款专为 JDI&#xff08;Japan Display Inc.&#xff09;LPM013M126A 型彩色内存式 LCD 显示模块设计的嵌入式图形驱动库。该库并非从零构建&#xff0c;而是继承自 ARM mbed OS 生态中广泛使用的GraphicDisplay抽象基类&#xff0c;延续了…...

从防火墙到AI:企业级网络异常检测方案选型指南(2024最新版)

从防火墙到AI&#xff1a;企业级网络异常检测方案选型指南&#xff08;2024最新版&#xff09; 当某跨国零售企业遭遇持续3天的DDoS攻击导致线上业务瘫痪时&#xff0c;技术团队发现传统防火墙规则库已48小时未更新&#xff1b;而当某金融机构因AI模型误判正常促销流量为异常导…...