亿级高并发电商项目-- 实战篇 --万达商城项目 四(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、保存请求到集合,以后可以随时发送该请求
相关文章:
![](https://img-blog.csdnimg.cn/6ed63a984c03455b9e6f2841964fcc6c.gif)
亿级高并发电商项目-- 实战篇 --万达商城项目 四(Dashboard服务、设置统一返回格式与异常处理、Postman测试接口 )
专栏:高并发---前后端分布式项目 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、…...
![](https://img-blog.csdnimg.cn/e9f4105a773a4e2a9b813f951f62a0e1.png)
为什么这11道JVM面试题这么重要(附答案)
本文内容整理自 博学谷狂野架构师 运行时数据区都包含什么 虚拟机的基础面试题 程序计数器Java 虚拟机栈本地方法栈Java 堆方法区 程序计数器 程序计数器是线程私有的,并且是JVM中唯一不会溢出的区域,用来保存线程切换时的执行行数 程序计数器ÿ…...
![](https://img-blog.csdnimg.cn/2ac9383429744fe99d407f42a1b9912f.png#pic_center)
概率统计之概率篇
概率统计之概率篇 一 随机变量及其四种研究方法 为了更深入地研究随机现象,需要把随机试验的结果数量化,也就是要引进随机变量来描述随机试验的结果。 一般地,把表示随机现象的各种结果或描述随机事件的变量叫做随机变量。随机变量通常用大…...
![](https://img-blog.csdnimg.cn/img_convert/87eae43f42b85cc92ed3bf61a3b70024.png)
综合项目 旅游网 【5.旅游线路收藏功能】
分析判断当前登录用户是否收藏过该线路当页面加载完成后,发送ajax请求,获取用户是否收藏的标记根据标记,展示不同的按钮样式编写代码后台代码RouteServlet/*** 判断当前登录用户是否收藏过该路线*/ public void isFavorite(HttpServletReques…...
![](https://csdnimg.cn/release/blog_editor_html/release2.2.3/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N176)
【ArcGIS Pro二次开发】(3):UI管理_显示隐藏Tab、Group、Control等控件
在ArcGIS Pro工作中,有时候会涉及到工具栏UI的管理,比如,打开模型构建器时,工具栏才会出现新的选项卡(Tab)【ModelBuilder】,工程未做更改,则【保存】按钮显示灰色不可用。 下面以一个小例子来学习一下。 一…...
![](https://img-blog.csdnimg.cn/ef365995c8ca404eae83b3136f86599e.png)
Spring Boot开发实战——echarts图标填充数据
echarts模块的导入 先看看成品吧! 有的图标的数据用了一些计算框架不是直接查数据库所以有点慢。 ok!😃 上正文,接上节Spring boot项目开发实战——(LayUI实现前后端数据交换与定义方法渲染数据)讲解了一般…...
![](https://www.ngui.cc/images/no-images.jpg)
李达聪老师:互联网时代的B2B品牌如何塑造
李达聪老师:互联网时代的B2B品牌如何塑造互联网时代企业对企业的品牌如何塑造?互联网时代信息传播速度加快,并且各大新品牌就如春天的竹笋涌出,有的昙花一现,有的趁着时代的红利乘胜追击占领市场,建立品牌。有的成为一…...
![](https://img-blog.csdnimg.cn/443d2c4a1de64ca08f54b355fa0d0ab3.png#pic_center)
javaEE 初阶 — 连接管理机制
文章目录连接管理机制1. 建立连接(三次握手)2. 断开连接(四次挥手)TCP 的工作机制确认应答机制 超时重传机制 连接管理机制 比如 主机A 的空间存储了 主机B 的 ip 和 端口,主机B 的空间存储了 主机A 的 ip 和 端口。…...
![](https://img-blog.csdnimg.cn/img_convert/9bfd522e407fdf7c6d8820f3a095bd00.jpeg)
40个改变你编程技能的小技巧!
40个改变编程技能的小技巧 1、将大块代码分解成小函数 2、今日事今日毕,如果没毕,就留到明天。 如果下班之前还没有解决的问题,那么你需要做的,就是关闭电脑,把它留到明天。 中途不要再想着问题了! 3、…...
![](https://img-blog.csdnimg.cn/img_convert/8c932f035e27ee03fdbe85764d59ec54.jpeg)
iTOP3588开发板直连电脑配置方法(无线上网)配置主机IP
首先使用网线连接好主机和开发板,在没有上电的情况下,可以看到以太网显示网络电缆 被拔出,如下图所示: 当开发板上电以后,开发板网卡与笔记本电脑的网卡会连接,如下图所示: 然后右键点击以太网…...
![](https://img-blog.csdnimg.cn/4a5d3e14e38e4ba28fa4e43074b73a97.png)
压电陶瓷换能器导纳圆图公式推导及匹配
压电陶瓷换能器的等效电路图如下图所示,分为左右两个部分左边的电容和电阻并联构成了电路的静态支路,被称为静态电容,可以由电表很方便的测量得到,这部分的参数是由换能器的电学参数决定的。右边的串联构成了动态支路,…...
![](https://img-blog.csdnimg.cn/f2346807130743cd9d41e4e48bae02c7.png)
设计模式C++实现11:观察者模式
参考大话设计模式; 详细内容参见大话设计模式一书第十四章,该书使用C#实现,本实验通过C语言实现。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式。 观察者模式定义了一种一对多的依赖关系,让多个观察…...
![](https://img-blog.csdnimg.cn/1019c824786c4f08b937c6a86f4b6c43.png)
l1和l2接口如何进行编写?一定要掌握这几个元素
在这个大数据时代,很多地方都需要用到l1和l2接口,l1和l2接口在应用程序与数据库之间起着桥梁的作用,是实现数据的整合与共享的重要帮手。 l1和l2接口适用于各行各业,应用场景的不断拓展,l1和l2接口的发展也兴起&#…...
![](https://img-blog.csdnimg.cn/4f0f4ac8f2a14f698b02df1e70ff221e.png)
GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)
目录闲言碎语最终全部效果展示(均为10241024512ssp)课程总结与理解(Path Tracing)框架梳理任务一:迁移相关代码任务二:实现path tracing任务三:多线程加速(包括其他加速的小trick&am…...
![](https://img-blog.csdnimg.cn/img_convert/0de1a1822e07cb0e0331d7dd080367d4.png)
面试题(二十四)数据结构与算法
9.1哈希 请谈一谈,hashCode() 和equals() 方法的重要性体现在什么地方? 考察点:JAVA哈希表 参考回答: Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。…...
![](https://img-blog.csdnimg.cn/955654ec860b4ec5b818c4aa3e663b4b.png)
【HAL库】STM32CubeMX开发----STM32F407----Uart串口接收空闲中断
一、Uart串口接收空闲中断----详解 首先介绍串口通信的数据传输方式,这样后面的Uart串口空闲中断能更好的理解。 Uart串口通信----数据传输方式 串口通信的数据由发送设备通过自身的TXD接口传输到接收设备得RXD接口。 一个字符一个字符地传输,每个字符…...
![](https://www.ngui.cc/images/no-images.jpg)
Qt_文件操作
本文包含以下内容: 文件操作 基本介绍:ini文件:csv文件:代码功能文件读写:1.1 读取文件1.1.1按行读取1.1.2整体读取1.2 写入文件2. 文件信息读取3. 文件夹的创建4. 获取文件夹下所有的文件5. 获取文件夹及子文件夹下所有的文件用树的方式在界面显示文件夹目录基本介绍: …...
![](https://img-blog.csdnimg.cn/6f94b6980af8457cbbcccc868c3c5ca7.jpeg#pic_center)
int和Integer有什么区别?
第7讲 | int和Integer有什么区别? Java 虽然号称是面向对象的语言,但是原始数据类型仍然是重要的组成元素,所以在面试中,经常考察原始数据类型和包装类等 Java 语言特性。 今天我要问你的问题是,int 和 Integer 有什么…...
![](https://img-blog.csdnimg.cn/e3b6af7db74040ebb2d787be6974767a.png)
Axure 9 收录不同效果的制作过程
效果类别 一、默认选中实现单选效果 1、默认选中 点击组件,右键选择selected字样; 2、实现单选效果 点击所有组件,右键选择selected group,填好命名,并设置选中时的组件样式;选择其中一个组件…...
![](https://img-blog.csdnimg.cn/cb1bc7afbc1147f0a69bd09549825de3.png)
[Datawhale][CS224W]图神经网络(一)
目录一、导读1.1 当前图神经网络的难点1.2 图神经网络应用场景及对应的相关模型:1.3 图神经网络的应用方向及应用场景二、图机器学习、图神经网络编程工具参考文献一、导读 传统深度学习技术,如循环神经网络和卷积神经网络已经在图像等欧式数据和信号…...
![](https://www.ngui.cc/images/no-images.jpg)
【Android实现16位灰度图数据转RGB数据并以bitmap格式显示】
Android实现16位灰度图数据转RGB数据并以bitmap显示(单通道Gray数据转三通道RGB数据并显示) 需求发现问题解决方案需求 问题需求:项目上需要实现将深度相机传感器给出的数据实时显示出来的功能。经过了解得知,传感器给出的数据为16位灰度图数据,即16位数据表示一个像素的…...
![](https://img-blog.csdnimg.cn/4d432331da334e8cbf6f4fd8f78a7860.jpeg#pic_center)
uni-app②
文章目录二、微信小程序简介(一)文档相关开发者工具使用小程序代码构成小程序基本操作三、uniapp 开发规范uniapp 开发环境开发工具下载 HBuilderX工程搭建项目运行浏览器运行四、组件基础组件基础组件列表组件公共属性集合扩展组件自定义组件UNI-ICON五…...
![](https://www.ngui.cc/images/no-images.jpg)
FFmpeg视频处理
目录 1. Ubuntu(wsl)安装 ffmpeg 2. ffmpeg查看指令 3. ffmpeg查看媒体文件信息 4. ffmpeg基础操作指令 5. ffmpeg视频抽帧 5.1 基于时间抽取帧 5.2 两种抽帧方式 5.3 视频流抽帧 5.4 视频批量抽帧 6. ffmpeg更改视频播放速度 7. ffmpeg视频格…...
![](https://img-blog.csdnimg.cn/fb8db70d167c4ad1afc25493415dcb76.png)
FreeRTOS任务通知 | FreeRTOS十二
目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …...
![](https://img-blog.csdnimg.cn/261b191c49184029a288f0e8fcebd351.png)
CentOS搭建博客typecho
Ubuntu搭建博客typecho_Dyansts的博客-CSDN博客 见过这样的文章展示页面吗? 详细视频安装教程: 9分钟快速搭建typecho博客,让你不再烦恼_哔哩哔哩_bilibili 现在就把他搭建出来 展示页面:Hello World 其他的插件:…...
![](https://www.ngui.cc/images/no-images.jpg)
湖南中创教育PMP如何实施风险应对,避免产生投诉
一、评估风险 评估风险影响的直接或间接价值 面临的潜在威胁,威胁发生的可能性有多大? 威胁一旦发生,损失是多大? 评估承受风险的能力 采取怎样的措施才能将损失降到最低,甚至为零 二、规划风险 对识别出来的风险进行分组或分类 确定…...
![](https://www.ngui.cc/images/no-images.jpg)
Urho3D子系统
通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。 发动机初始化后,以下子系统将…...
![](https://www.ngui.cc/images/no-images.jpg)
无线网络术语总结
学习802.11协议,其中有一些英文缩略词,这里做一下总结与记录。 学习资料:知乎徐方鑫 802.11相关文章 802.11协议精读3:CSMA/CD与CSMA/CA - 知乎 (zhihu.com) 无线网络术语缩写全称中文含义APAccessPoint无线访问节点用于无线网络…...
![](https://img-blog.csdnimg.cn/img_convert/e30a0e121f73902c587b3c2d16477046.jpeg)
海卡和海派有什么区别
一、海卡和海派有什么区别 海派和海卡实际上就是快船和慢船的区别。都是头程选用海运的方式,海派是到海港海关清关拆柜后,尾程配送是采用快递配送。而海卡则是到海港海关清关拆柜后,尾程选用货车配送。1、海派比较适用于小件货物 海派是海运抵…...
![](https://img-blog.csdnimg.cn/abceaf73652d410dbf8a1efb34673f3f.png)
vue3学习资料整理
一、一个后端程序员为什么要学习前端? 1.网上找到的学习理由 《Java后端的我也要学Node.js 了》 https://blog.csdn.net/yusimiao/article/details/104689007 《nodejs后端开发的优缺点(nodejs的概念与特征详解)》 https://www.1pindao.co…...
![](https://img-blog.csdnimg.cn/img_convert/9d235a0a35557ba9256a82fb7bbe6241.png)
正规的培训行业网站制作/app推广方案
前言:中秋国庆假期快结束了,马上又要投入到工作或学习中了,可能有部分人已经投入工作或是学习了。 我们在未来会遇到很多的困难与麻烦,但是只要坚信自己不服输不断拼搏,那这些困难与麻烦终究要拜倒在我们脚下。嗒嗒嗒&…...
![](/images/no-images.jpg)
赫章网站建设/网站ui设计
在CSS中,与媒体相关的样式定义是从CSS2.1开始的。CSS2.1中定义了各种媒体类型,包括显示器、便携设备、电视机,等等。 CSS3中加入了Media Queries模块,该模块中允许添加媒体查询表达式,用以指定媒体类型࿰…...
![](https://img-blog.csdnimg.cn/2021081023025154.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDkzNTc1,size_16,color_FFFFFF,t_70)
网站源码系统/百度竞价广告投放
一、什么是rpm rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文●件. RPM是RedHat Package Manager ( RedHat软件包管理工具)的缩写,类似windows的setup.exe ,这一文件格式名称虽然打上了RedHat的标志,但理念…...
![](https://img2018.cnblogs.com/blog/1573074/201901/1573074-20190118160224662-545431820.gif)
顺德装修网站建设/百度推广区域代理
已将完整示例放置在github上 地址:https://github.com/LyyZzzz/img-slide.git如有转载望附带本网页链接 /*** created by Lee on 2019/1/18 12:07* slide 调用方法 基于jq *为必传* param box 图片盒子 ** param eachbox 每个图片最高父级 ** param time 轮播间隔…...
![](https://img-blog.csdnimg.cn/img_convert/b40425a211b6878498635ceaca4a6bbd.png)
品牌工厂网站建设/离我最近的电脑培训中心
2019年第 12 篇文章图片建议放大观看Hello,大家好,我是利兄~在PPT中表格非常常见,尤其是一些数据汇报类PPT,表格就是家常便饭。相对于图表,表格可以承载更多的信息,如果设计的好,在展现上的优势…...
![](/images/no-images.jpg)
外贸门户网站/怎么在百度发布自己的文章
前言: spring 的环绕通知和前置通知,后置通知有着很大的区别,主要有两个重要的区别: 1) 目标方法的调用由环绕通知决定,即你可以决定是否调用目标方法,而前置和后置通知 是不能决定的…...