统⼀数据返回格式快速⼊⻔
为什么会有统⼀数据返回?
其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维。
1.⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。
2.降低前端程序员和后端程序员的沟通成本,因为所有接⼝都是固定的返回格式。
3.有利于项⽬统⼀数据的维护和修改。
4.有利于后端技术部⻔的统⼀规范的标准制定。
代码实现
假如我们要统一返回Result 对象
import lombok.Data;@Data
public class Result<T> {private String s = "我是Result的s属性";private Integer num = 2008;private T data;public static <T> Result success(T data) {Result result = new Result<>();result.setData(data);return result;}
}
使用TextController进行测试
import com.wh.advice.model.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RestController
public class TextController {@RequestMapping("/text1")public Integer text1() {return 100;}@RequestMapping(value = "/text2", produces = "application/json")public String text2() {return "text";}@RequestMapping("/text3")public Result<List<Integer>> text3() {List<Integer> list = new ArrayList();list.add(1);list.add(2);list.add(3);return Result.success(list);}
}
注意:
produces = "application/json"->表示将生产json格式的数据
统⼀的数据返回格式的实现
- 添加类注解@ControllerAdvice,实现接口ResponseBodyAdvice
- 重写responseAdvice方法
- 重写beforeBodyWriter方法
代码:
import com.wh.advice.model.Result;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {return Result.success(body);}
}
1.supports⽅法: 判断是否要执⾏beforeBodyWrite⽅法. true为执⾏, false不执⾏. 通过该⽅法可以选择哪些类或哪些⽅法的response要进⾏处理, 其他的不进⾏处理.2.beforeBodyWrite⽅法: 对response⽅法进⾏具体操作处理 。
1.测试http://127.0.0.1:8080/text1
添加统⼀数据返回格式之前:

添加统⼀数据返回格式之后:

2.我们继续测http://127.0.0.1:8080/text2
多测试⼏种不同的返回结果, 发现只有返回结果为String类型时才有这种错误发⽣
解决问题:
我们要注入ObjectMapper
@Autowired private ObjectMapper objectMapper;
对 beforeBodyWrite⽅法进行修改:
@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof String) {return objectMapper.writeValueAsString(Result.success(body));}return Result.success(body);}
3.如果⼀些⽅法返回的结果已经是Result类型了, 那就直接返回Result类型的结果即可
完整代码:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wh.advice.model.Result;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Autowiredprivate ObjectMapper objectMapper;@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof Result) {return body;}if (body instanceof String) {return objectMapper.writeValueAsString(Result.success(body));}return Result.success(body);}
}
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞 ![]()

相关文章:
统⼀数据返回格式快速⼊⻔
为什么会有统⼀数据返回? 其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维。 优点: 1.⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。 2.降低前端程序员和后端程序员的沟通成本,因为所有接⼝都…...
Python学习------第十天
数据容器-----元组 定义格式,特点,相关操作 元组一旦定义,就无法修改 元组内只有一个数据,后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…...
Win11 24H2新BUG或影响30%CPU性能,修复方法在这里
原文转载修改自(更多互联网新闻/搞机小知识): 一招提升Win11 24H2 CPU 30%性能,小BUG大影响 就在刚刚,小江在网上冲浪的时候突然发现了这么一则帖子,标题如下:基准测试(特别是 Time…...
element ui 走马灯一页展示多个数据实现
element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 主要是对走马灯的数据的操作,先看js处理 let list [{ i: 1, name: 1 },{ i: 2, name: 2 },{ i: 3, name: 3 },{ i: 4, name: 4 },]let newL…...
40分钟学 Go 语言高并发:Goroutine基础与原理
Day 03 - goroutine基础与原理 1. goroutine创建和调度 1.1 goroutine基本特性 特性说明轻量级初始栈大小仅2KB,可动态增长调度方式协作式调度,由Go运行时管理创建成本创建成本很低,可同时运行数十万个通信方式通过channel进行通信&#x…...
Figma插件指南:12款提升设计生产力的插件
在当今的设计领域,Figma已经成为许多UI设计师和团队的首选原型和数字设计软件。随着Figma的不断更新和插件库的扩展,这些工具极大地提升了设计工作的效率。本文将介绍12款实用的Figma插件,帮助你在UI设计中更加高效。 即时AI 即时AI利用先进…...
【K8S系列】Kubernetes集群资源管理与调度 深度分析
在现代微服务架构中,Kubernetes(K8s)作为容器编排平台,提供了强大的资源管理和调度能力。然而,随着应用规模的扩大和复杂性增加,如何高效地管理和调度集群资源成为一个关键挑战。本文将深入探讨 Kubernetes…...
delphi fmx android 离线人脸识别
搜遍全网都没有找到delphi android 能用的 离线人脸识别,无需注册什么开发者 有这方面需求的可以用fsdk 这边用的luxand.FSDK8.0 android下的注册号要自己找下 1,用老猫的工具将android 下的sdk,FSDK.java 编译成FSDK.jar 老猫的工具 2,用上面的工具将FSDK.jar 生成de…...
Linux mountpoint 命令详解
前言 在 Linux 系统中,文件系统管理是一个非常重要的任务。mountpoint 是一个常用的小工具,用于检查目录是否是挂载点。本篇博客将详细介绍 mountpoint 命令的用法及其在日常系统管理中的应用。 什么是挂载点? 挂载点是一个目录࿰…...
Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验
在前面章节,我们有过使用寄存器去编写字符设备的经历了。这种直接在驱动代码中, 通过寄存器映射来对外设进行使用的编程方式,从驱动开发者的角度可以说是灾难。 因为每当芯片的寄存器发生了改动,那么底层的驱动几乎得重写。 那么…...
用sqlmap工具打sqli-labs前20关靶场
这个星期我们用手动注入打了前20关靶场,今天我们用sqlmap直接梭哈前20关 1.介绍sqlmap sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞。 2.下载和使用sqlmap 官方下载地址:GitHub - sq…...
代码随想录算法训练营第二十一天 | 93.复原IP地址 | 78.子集
Day 20 总结 自己实现中遇到哪些困难 一句话讲明白问题分类 组合问题和分割问题都是收集树的叶子节点,子集问题是找树的所有节点!切割字符串问题回顾 昨天的切割回文子串,和今天的切割ip地址,都是需要将字符串拆分成 n 份。只不过…...
#Uniapp篇:支持纯血鸿蒙发布适配UIUI
uni-ui梳理 组件生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle 页面生命周期 https://uniapp.dcloud.net.cn/collocation/App.html#applifecycle onLaunch 当uni-app 初始化完成时触发(全局只触发一次),…...
边缘提取函数 [OPENCV--2]
OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像(边界一般和颜色无关)这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像,第二个是输出的图像这两个参数都是引用…...
插值原理(数值计算方法)
插值原理(数值计算方法) 一. 原理介绍二. 图例三. 唯一性表述 一. 原理介绍 在数学中,插值(Interpolation)是指通过已知的离散数据点,构造一个连续的函数,该函数能够精确地通过这些数据点&#…...
【Pikachu】SSRF(Server-Side Request Forgery)服务器端请求伪造实战
尽人事以听天命 1.Server-Side Request Forgery服务器端请求伪造学习 SSRF(服务器端请求伪造)攻击的详细解析与防范 SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种安全漏洞,它允许攻击者通…...
IDEA怎么定位java类所用maven依赖版本及引用位置
在实际开发中,我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景,便于排查问题,怎么通过IDEA实现呢? 可以在IDEA中打开项目,右键点击maven的pom.xml文件,或者在maven窗口下选中项目,…...
Discuz论坛网站管理员的默认用户名admin怎么修改啊?
当我们在某个论坛注册账号后,处于某种原因想要修改用户名,该如何修改? Discuz论坛网站管理员处于安全性或某种原因想要修改默认用户名admin该如何修改?驰网飞飞和你分享 其实非常简单,但是普通用户没有修改权限&…...
BIO、NIO、AIO的区别?
文章目录 BIO、NIO、AIO的区别?为什么不使用java 原生nio哪些项目使用了netty BIO阻塞I/O存在问题 NIO(nonblocking IO)Java NIO channel(通道)、buffer、selector(选择器) AIO(Asynchronous I/O) BIO、NIO…...
音视频入门基础:MPEG2-TS专题(7)——FFmpeg源码中,读取出一个transport packet数据的实现
一、引言 从《音视频入门基础:MPEG2-TS专题(3)——TS Header简介》可以知道,TS格式有三种:分别为transport packet长度固定为188、192和204字节。而FFmpeg源码中是通过read_packet函数从一段MPEG2-TS传输流/TS文件中读…...
电力系统暂态稳定性:Matlab 编程与 Simulink 仿真探索
电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障,各类(单相断线,两相断线,三相断线ÿ…...
嵌入式方向输入抽象库:摇杆与按键的语义化状态映射
1. 项目概述direction是一个轻量级、零依赖的嵌入式方向输入抽象库,专为资源受限的微控制器(如 STM32F0/F1/L0/L1、nRF52、ESP32-C3、RP2040 等)设计。其核心目标并非实现复杂的人机交互逻辑,而是以最小的代码体积和确定性的执行时…...
算法教学中的交互式可视化实验平台研究的技术6
引言研究背景:算法教学中的挑战与可视化工具的重要性研究意义:交互式平台对算法理解与教学效果的提升国内外研究现状与现存问题交互式可视化实验平台的设计目标核心需求:直观性、实时反馈、可操作性技术指标:跨平台兼容性、低延迟…...
nli-distilroberta-base企业应用:构建合规性审查中的条款逻辑链分析系统
nli-distilroberta-base企业应用:构建合规性审查中的条款逻辑链分析系统 1. 项目概述 在当今企业合规管理中,合同条款的逻辑一致性审查是一项耗时且容易出错的工作。nli-distilroberta-base作为基于DistilRoBERTa的自然语言推理(NLI)模型,为…...
从实验室到产线:硅片ni值之争如何影响你的芯片设计与工艺仿真?
硅片ni值之争:芯片设计与工艺仿真中的隐形战场 当你在Sentaurus中设置完所有物理模型参数,点击仿真按钮时,是否想过一个看似基础的本征载流子浓度(ni)参数,可能正在悄悄扭曲你的仿真结果?在300K温度下,从1.…...
ComfyUI-AnimateDiff-Evolved开发者指南:自定义适配器与扩展开发
ComfyUI-AnimateDiff-Evolved开发者指南:自定义适配器与扩展开发 【免费下载链接】ComfyUI-AnimateDiff-Evolved Improved AnimateDiff for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-AnimateDiff-Evolved ComfyUI-AnimateDiff-Evolved是…...
易经的天人合德:从伏羲到孔子,三古三圣如何将天道引入人心
世界上只有中华民族崇尚“天人合一”。外国人不理解这个理念,觉得天是天、人是人,怎么能合一呢?但在中国人看来,天和人本来就是一体的。我们敬畏老天,不是因为它高高在上,而是因为它就在我们身边࿰…...
张量内存爆炸的终极解法(vLLM式PagedAttention移植指南),释放73%显存却保持99.2%精度——内部压测报告首度解禁
第一章:张量内存爆炸的本质与vLLM式解法全景图张量内存爆炸并非模型参数规模的简单线性外推结果,而是由推理过程中冗余显存驻留、非最优内存布局及静态分配策略共同引发的系统性瓶颈。典型场景下,一个7B参数模型在生成长度为1024的序列时&…...
Vue3 知识点总结 · 2026-03-24
Vue3 知识点总结 2026-03-24 👨💻 嘿!大家好 👋前后端开发工程师 日更 CSDN & 掘金我是一名对代码狂热的 IT 工作者,目前在一家公司任职前后端开发工程师。以后每天都会更新 CSDN 和稀土掘金的文章——工作中写…...
Pixel Dimension Fissioner 数据库集成:MySQL存储用户生成内容与模型参数
Pixel Dimension Fissioner 数据库集成:MySQL存储用户生成内容与模型参数 1. 场景需求与技术选型 在构建基于Pixel Dimension Fissioner的UGC平台时,我们需要处理三类核心数据:用户信息、生成任务记录和模型参数配置。MySQL因其成熟稳定、社…...
