springBoot统一响应类型3.3版本

前言:

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷,而实践和认识之每一循环的内容,都比较地进到了高一级的程度。

上期回顾:

1:@ControllerAdvice提供了对全局统一响应支持

2:supports与beforBodyWrite关系,用一个三元运算符表示,supports ? beforBodyWrite :异常

3:supports只影响同一文件下的beforeBodyWrite

本期将进入到全局异常中

先创建一个类,我称其为异常统一类

第一点的:HTTP 状态码 | 菜鸟教程

第二点的:异常信息

继承RuntimeException,自动捕获运行时的异常

@Data
@AllArgsConstructor
public class BusinessException extends RuntimeException {/*** 异常编码* 异常信息*/private int code;private String massage;/*** 无参构造函数*/public BusinessException() {super();}
}

随着实践的加深

作者 对统一响应进行了更具体的细分

统一响应:成功响应和异常响应

根据它们传入的参数,又可以具体分为三种:

        第一种:基本响应        

        第二种:自定义信息响应

        第三种:完全自定义响应

对应形参

第一种:data

第二种:message、data

第三种:code、message、data

有些b人就是喜欢搞一些多余编码code,美名其曰专业化,之前的版本只有自定义消息,没做自定义编码,所以不适用了

public class apiResultYOUYA {/*** 默认成功HTTP状态码 (200 OK)*/private static final int OK = HttpStatus.OK.value();/*** 默认错误HTTP状态码 (500 Internal Server Error)*/private static int NO = HttpStatus.INTERNAL_SERVER_ERROR.value();/***  基本响应** @param data 响应数据* @param <T> 响应数据类型* @return*/public static <T> apiResult<T> success(T data) {return new apiResult<>(OK, "操作成功", data);}/***  自定义信息统一响应* @param message 自定义提示信息* @param data 响应数据* @return* @param <T> 响应数据类型*/public static <T> apiResult<T> success(String message, T data) {return new apiResult<>(OK, message, data);}/***  完全自定义统一响应* @param code  自定义提示编码* @param message 自定义提示信息* @param data  响应数据* @return* @param <T>   响应数据类型*/public static <T> apiResult<T> success(int code, String message, T data) {return new apiResult<>(code, message, data);}/***  基本失败响应* @return* @param <T> 响应数据类型*/public static <T> apiResult<T> error() {return new apiResult<>(NO, "系统错误,请联系管理员");}/***  自定义信息统一失败响应* @param message 自定义提示信息* @return* @param <T> 响应数据类型*/public static <T> apiResult<T> error(String message) {return new apiResult<>(NO, message);}/***  完全自定义统一失败响应* @param code  自定义编码* @param message 自定义提示信息* @return* @param <T> 响应数据类型*/public static <T> apiResult<T> error(int code, String message) {return new apiResult<>(code, message);}}

统一异常类处理

@Slf4j
@RestControllerAdvice
public class GlobalExcResult {@ExceptionHandler(Throwable.class)public apiResult handleException(Throwable throwable){if (throwable instanceof BusinessException businessException){log.info("请求出现业务异常:",throwable);return apiResultYOUYA.error(businessException.getMessage());}log.error("请求出现系统异常:",throwable);return apiResultYOUYA.error("服务器内部错误");}
}

运行

控制台打印报错是因为这两句

log.error("请求出现系统异常:",throwable);

log.info("请求出现业务异常:",throwable);

这响应内容是包含在data里的,重复了

在统一响应中打上断点,查看body

        if (body instanceof apiResult){return (apiResult)body;}

将它们转换成apiresult

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

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

相关文章

mapbox基础,加载popup弹出窗

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️popup 弹出窗 api1.3.1 ☘️构造函数1.…

MySQL基础语法1

目录 #1.创建和删除数据库 ​编辑#2.如果有lyt就删除,没有则创建一个新的lyt #3.切换到lyt数据库下 #4.创建数据表并设置列及其属性,name是关键词要用name包围 ​编辑 #5.删除数据表 #5.查看创建的student表 #6.向student表中添加数据,数据要与列名一一对应 #7.查询st…

【ESP32S3】esp32获取串口数据并通过http上传到前端

通过前面的学习&#xff08;前面没发过&#xff0c;因为其实就是跑它的demo&#xff09;了解到串口配置以及开启线程实现功能的工作流程&#xff0c;与此同时还有esp32作为STA节点&#xff0c;将数据通过http发送到服务器。 将这两者联合 其实是可以得到一个&#xff1a;esp32获…

CSS 美化页面(二)

一、CSS 属性详解 1、字体属性 (Font) 属性描述值示例简写属性font-family设置字体系列"Arial", sans-serif font: italic small-caps bold 16px/1.5 "Arial", sans-serif; font-size设置字体大小16px, 1.2em, 1remfont-weight设置字体粗细normal, bold,…

win32汇编环境,网络编程入门之十四

;win32汇编环境,网络编程入门之十四 ;在这一教程里&#xff0c;学习一下&#xff0c;如何得到网页的标题 ;这里需要理解一下html语言&#xff0c;<title> </title>标签对里面的内容即为网页的标题 ;其原理是把返回的字符串&#xff0c;按字节进行检查&#xff0c;发…

[已解决]服务器CPU突然飙高98%----Java程序OOM问题 (2024.9.5)

目录 问题描述问题排查问题解决参考资料 问题描述 业主单位服务器自8月29日晚上21:00起CPU突然飙高至98%&#xff0c;内存爆满&#xff0c;一直到9月5日&#xff1a; 问题排查 ①执行 top 命令查看Java进程PID top②执行top -Hp PID 命令查看具体的线程情况 top -Hp 3058输入上…

UI产品经理基础(六):如何解决用户的质疑?

在需求调查中遇到用户质疑“不专业”或“不了解需求”&#xff0c;本质上是用户对产品经理的信任缺失或沟通鸿沟导致的。要化解这种质疑&#xff0c;需从专业能力展示、沟通方式优化、用户参与感提升三个维度切入&#xff0c;结合具体场景采取针对性策略。以下是系统化的解决方…

小型水库大坝安全及水雨情监测技术方案

一、小型水库监测系统构成 小型水库雨水情测报和大坝安全监测系统由水库监测站点、通信网络和监测平台等组成&#xff0c;系统总体架构如图所示。 水库监测站点设施包括&#xff1a;雨量计、水位计、视频监视设备、渗压计、量水堰计、变形监测仪器、数据采集仪、遥测终端、水准…

win11+ubuntu双系统安装

操作步骤&#xff1a; 官网下载ubuntu 最新镜像文件 准备U盘 准备一个容量不小于 8GB 的 U 盘&#xff0c;用于制作系统安装盘。制作过程会格式化 U 盘&#xff0c;请注意提前备份数据。 制作U盘启动盘 使用rufus工具&#xff0c;或者 balenaEtcher工具&#xff08;官网安…

搭建前端环境和后端环境

搭建前端环境 ①、安装vscode&#xff0c;并安装相应的插件工具 ②、安装node.js&#xff0c;可以选择当前版本&#xff0c;或者其他版本 ③、创建工作区 创建一个空文件夹&#xff0c;然后通过vscode工具打开&#xff0c;保存为后缀名为.code-workspace ④、从gitee…

I.MX6ULL 开发板上挂载NTFS格式 U 盘

I.MX6ULL 开发板上挂载NTFS格式 U 盘 挂载失败安装NTFS-3G安装失败成功安装 移植挂载成功卸载U盘 挂载失败 我使用的U盘的格式是NTFS格式的 插入U盘时会有信息 我使用的是闪迪的U盘&#xff0c;大小标称是 32G &#xff0c;实际能用的只有 28G 左右 可以使用lsblk命令查看磁盘…

K. Dice Game(ICPC)

备赛ICPC时&#xff0c;我是没想到还有数学题&#xff0c;高数都快忘完了......... 题目链接&#xff1a;Problem - K - Codeforces 我们对于某一个抽到的值x&#xff0c;其他n个人中的某一个人赢我们的概率是&#xff1a; (m-x)/m(m-x)/m^2(m-x)/m^3....(m-x)/m^K&#xff0…

加油站小程序实战教程02宫格导航

目录 引言1 应用创建2 搭建页面布局3 大模型生成图标最终效果 引言 在《加油站小程序实战教程01》中我们详细介绍了站点基本信息数据维护功能的搭建。有了数据之后就需要考虑小程序展示部分该如何搭建&#xff0c;本篇我们介绍一下应用的创建、页面布局以及数据绑定的过程。 …

如何用 Postman 进行高效的 Mock 测试?

Postman 是一个强大的 API 开发和测试工具&#xff0c;它可以让你轻松地创建和发送各种 HTTP 请求&#xff0c;查看响应结果&#xff0c;并进行调试和优化。但是有时候&#xff0c;你可能还没有开发好后端服务&#xff0c;或者想要模拟不同的响应场景&#xff0c;这时候就可以使…

2025AWE观察:“无AI不家电”,但“AI”还是“AL”仍是个问题

文 | 智能相对论 作者 | 佘凯文 3月23日&#xff0c;2025中国家电及消费电子博览会&#xff08;AWE&#xff09;在上海完美闭幕。 这场以“AI科技、AI生活”为主题的展会&#xff0c;俨然成为家电行业向智能化跃迁的缩影。从冰箱、空调到扫地机器人&#xff0c;从全屋智能到…

【赵渝强老师】Oracle数据库的客户端工具

安装并成功创建Oracle数据库后&#xff0c;便可以使用客户端工具来连接Oracle数据库。Oracle官方提供的客户端工具有&#xff1a;SQL*Plus、Oracle Enterprise Manager Database Express和SQL Developer。 一、 【实战】使用命令行工具SQL*Plus 在Oracle数据库系统中&#xf…

8.3MW屋顶光伏+光储协同:上海汽车变速器低碳工厂的能源革命-安科瑞黄安南

摘 要&#xff1a;常规能源以煤、石油、天然气为主&#xff0c;不仅资源有限&#xff0c;而且会造成严重的大气污染&#xff0c;开发清洁的可再生能源已经成为当今发展的重要任务&#xff0c;“节能优先&#xff0c;效率为本”的分布式发电能源符合社会发展要求。 随着“双碳”…

【蓝桥杯每日一题】3.28

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x "今天熬的夜&#xff0c;会变成明天奖状的闪光点&#xff01;" 目录 一、唯一的雪花 题目链接 题目描述 解题思路 解题代码 二、逛画展 题目链接 题目描述 解题思路 解题代…

WPS JS宏编程教程(从基础到进阶)--第二部分:WPS对象模型与核心操作

第二部分&#xff1a;WPS对象模型与核心操作 WPS对象的属性、方法、集合 工作簿对象常用表达方式工作表对象常用表达方式单元格对象常用表达方式 单元格操作实战 单元格复制与重定位单元格偏移与尺寸调整 颜色设置专题 索引颜色与RGB颜色按条件动态设置单元格颜色 第二部分&…

【NLP 48、大语言模型的神秘力量 —— ICL:in context learning】

目录 一、ICL的优势 1.传统做法 2.ICL做法 二、ICL的发展 三、ICL成因的两种看法 1.meta learning 2.Bayesian Inference 四、ICL要点 ① 语言模型的规模 ② 提示词prompt中提供的examples数量和顺序 ③ 提示词prompt的形式&#xff08;format&#xff09; 五、fine-tune VS I…