Springmv SpringBoot Restful接口返回结果统一封装统一异常封装

spring中数据返回格式统一封装ResponseBodyAdvice接口+@ControllerAdvice注解 使用场景,统一封装后端响应格式,规范响应内容; spring中数据返回格式统一封装用到的技术: ResponseBodyAdvice接口 @ControllerAdvice注解 WebMvcConfigurer 接口 阅读详情

问题背景

  • 在web开发过程中,我们常常会提供两类接口。一类是内部接口,这类接口主要为web页面服务的,web前端可以通过ajax等手段进行后台数据的获取并渲染页面;另一类接口主要是供第三方使用,以便于与第三方系统集成。
  • 但不管是哪一种接口,不管返回数据内容如何千变万化, 为了保证返回数据的可读性,通常都会采用统一的格式封装数据值。
    期望封装格式如下:
{
“data”: Obj,
“errorCode”: 0,
“message”: “数据获取成功”
}
  • 这样一来,不管接口获取的是什么数据(文件流、字符串(非json形式的字符串)除外),序列化后的数据本身都仅仅是一个更大的json对象的data字段而已,与data字段处于同一级别的额外信息还包括errorCode、message、success等字段。
  • 采用统一的数据格式封装数据的好处不言而喻。比如在ajax调用数据成功以后,ajax根据返回的数据的errorCode字段是0还是其他错误编码,分别弹出不同颜色的提示框,以便区分数据到底是获取成功还是获取失败。
  • 然后,这个弹出的提示框往往会有一条提示信息,以便让用户知道,这个接口是什么原因导致调用失败的,而用于渲染提示框的提示信息,一般就取自message字段。

使用springmvc实现结果统一装配

从spring mvc 4.0起引入RequestBodyAdvice和ResponseBodyAdvice这两个接口。

  • RequestBodyAdvice主要用于对请求参数的增强处理。
  • ResponseBodyAdvice用于对响应参数的增强处理。
  1. 实现ResponseBodyAdvice
    在这里插入图片描述
    supports方法实现表明,只有序列化框架是Jackson才对返回结果进行增强,具体项目中使用了哪一种序列化框架,修改该方法的实现即可。
    在这里插入图片描述
    beforeBodyWrite方法表明,Jackson序列化框架序列化的是增强的结果对象,而不是Restful接口方法返回值代表的那个对象。
    在这里插入图片描述
  2. 增加@ControllerAdvice注解,由Spring管理
    在这里插入图片描述
  3. 代码对比
    先看统一返回前的代码:
    在这里插入图片描述
    统一返回后的:
    在这里插入图片描述
    如上述代码所示,使用springmvc的结果统一装配功能后,对于有返回值的方法,需要返回什么类型的数据,则直接返回指定类型的对象实例即可。逻辑清晰明了,不需要每一个方法都返回千篇一律的MessageBean对象。

异常处理统一封装

  1. 创建异常处理工具类
    增加BaseExceptionHandleAction类,并在类中同时使用@ExceptionHandler和@ResponseBody注解声明异常处理,示例代码如下:
    在这里插入图片描述
  2. 需要处理异常的控制器继承该类
    在这里插入图片描述
    然后,假如前端未传入状态status,前端收到的响应字符串如下:
{
“errorMsg “: “禁止操作”
“errorCode” : 403
}
go-zero单体应用入门实战(二) 项目名称:火星电子书店 参考项目结构:参照微服务架构来搭建,方便以后扩展。单体应用可以看作微服务架构当中的一个特例。软件架构在以后业务发展,逐步重构,好的架构是重构出来的。 阅读详情

相关推荐

【Spring Boot】实战:实现优雅的数据返回

定义返回值的基本要素,确保后台执行无论成功还是失败都是返回这些字段,而不会出现其他的字段。Integer code:成功时返回0,失败时返回具体错误码。String message:成功时返回null,失败时返回具体错误消息。T data:成功时返回具体值,失败时为null。

衍生星球的博客 910

SpringMVC返回结果“统一组装”介绍

SpringMVC返回结果“统一组装”技术——ResponseBodyAdvice

lhever_的博客 6801

CNC雕刻与VCarve Pro实战:将三维地形数据转化为木质景观时钟

计算机辅助制造(CAM)是现代数字制造的核心技术之一,它通过软件将设计模型转化为机床可执行的指令,驱动设备进行精准加工。其原理在于将三维模型离散为刀具运动路径(G代码),控制铣刀等执行机构进行“减材”成型。这项技术的价值在于实现了复杂三维形体的高精度、可重复制造,极大地拓展了创意实现的边界。在应用场景上,CAM广泛应用于模具加工、原型制作、个性化工艺品制造等领域。本文聚焦于一个具体实践:利用VCarve Pro软件,结合从在线地图服务获取的真实地形STL数据,通过CNC雕刻机在硬木上加工出具有真实地理特征的

weixin_30651345的博客 376

josn格式解析

首先要对这一串字符进行json解析 {"success":1,"message":"获取成功","resultData":"{\"draw\":0,\"recordsFiltered\":6930,\"recordsTotal\":6930,\"data\":\"[{\\\"rownum\\\":1,\\\"ID\\\":17,\\\"成果名称\\\":\\\"生态茶园土壤高效可持续培肥技术\...

非衣鲲化的博客 822

MEMS惯性传感器关键参数解析与误差优化策略

本文深入解析了MEMS惯性传感器的关键性能参数,如零偏稳定性、噪声与随机游走、振动整流误差等,并阐述了这些误差如何导致设备导航漂移、姿态不稳等问题。文章重点探讨了从硬件选型、系统设计到校准补偿、算法融合(如卡尔曼滤波)以及温度补偿等实战优化策略,旨在帮助工程师有效提升自动驾驶、无人机等设备的测量精度与稳定性。

weixin_28363123的博客 414

一分钟学会MATLAB-数据清洗(含完整代码)

数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。

2402_87132195的博客 3316

Spring、SpringBoot、SpringMVC之间到底是什么区别

SpringBoot、Spring、SpringMVC到底是什么,他们应用的场景是什么

m0_46205599的博客 316

汇川EASY系列之以太网通讯(套接字socket做从站)

汇川EASY系列的以太网通讯中的Socket字通讯,不能使用配置的方式实现,只能通过指令完成,本文将详细说明

这是一个长期关注工控行业技术的博客,实现0-1的突破,期待您的关注和留言 2990

项目中controller层统一返回结果

1.统一返回结果的优点: 项目中我们会将响应封装成json返回,若将所有的接口的数据格式统一,可以使前端对数据的操作更一致、轻松。 2.组成 一般是包含状态码、返回消息、数据这三部分 例如: { code: , // 1:成功 , 0:失败 message:"xxx成功", //或者 xxx失败 data:数据 //实体对象,list,map } 3.创建 1.首先创建ResponseEnum枚举,用来承载响应码对应报错的原因。 @Getter //方便

weixin_47356044的博客 2142

蓝桥杯单片机学习13——NE555方波发生器&频率测量

NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现

weixin_67907028的博客 1万+

基于PLC的全自动洗衣机控制系统+控制程序

本设计使用PLC控制系统替换了传统的继电器控制系统,实现了全自动洗衣机在硬件方面的提升,丰富了全自动洗衣机在软件方面的功能,提高了全自动洗衣机的洗衣效率,基本可以满足用户的洗衣需求。

zzzz114231的博客 8952

springmvc统一返回数据格式

springmvc统一返回数据格式 springmvc会封装响应成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。我们可以将返回数据格式统一为:1.状态码;2.返回消息;3.数据。 如下: { "success": 布尔, //响应是否成功 "code": 数字, //响应码 "message": 字符串, //返回消息 "data": HashMap //返回数据,放在键值对中 } 接下来进行统一返回数据格式的配置:

黑马Jack的博客 1110

鱼鹰优化算法(OOA)详解:从猛禽捕食智能到优化算法实现

鱼鹰优化算法(Osprey Optimization Algorithm, OOA)是2023年提出的一种新型元启发式优化算法,灵感来源于鱼鹰(一种中型猛禽)高效的捕食策略。算法模拟了鱼鹰从空中识别水下鱼类位置并俯冲捕食,然后将捕获的鱼带至安全位置享用的全过程,以此抽象出全局探索和局部开发两个核心阶段。OOA算法具有参数少、结构简单、收敛速度快、全局寻优能力强等特点。自提出以来,已在函数优化、机器学习参数调优(如CatBoost模型)、路径规划等多个领域展现出良好性能,为解决复杂优化问题提供了新的有效工具。

qq_42212808的博客 272

Spring MVC 统一返回格式

api统一数据返回的JSON格式,可使用统一返回类,AOP,过滤器,拦截器或实现HandlerMethodReturnValueHandler方法。 AOP:利用环绕通知,对包含@RequestMapping注解的方法统一处理 优点:配置简单、可捕获功能方法内部的异常 缺点:aop不能修改返回结果的类型,因此功能方法的返回值须统一为Object类型 过滤器:在过滤器层统一处理 优点:配置简单 缺点...

shpunishment的博客 1925

UniApp 覆盖安装后首次进入 APP pages.json 不生效的解决方案

通过以上步骤,解决了缓存问题导致的首次加载异常。此方案的关键在于强制更新文件名,从根本上避免旧缓存的干扰。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 681

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringMVC对contorller返回值做加强处理

昨天我在项目中加入了token验证,我想在所有修改数据库的ajax请求后增加token的更新操作. 开始我想通过SpringMVC的拦截器在controller方法调用结束后统一进行token的更改,但是并不成功. 查阅资料后发现了ControllerAdvice,它是在spring4.0后出现的. 它可以在controller的方法在用@ResponseBody把返回值转换为json对象之...

yan245294305的博客 845

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot统一返回值及异常包装

欢迎使用Markdown编辑器写博客 在项目开发过程中,我们希望所有接口返回值都包含四个元素。 a、code:请求接口的返回码,成功或者异常等返回编码,例如定义请求成功,code = “0000”,code = “1111”; b、message:请求接口的描述,也就是对返回编码的描述,“0000”:表示请求结果为成功,“1111”:表示请求结果为失败,可以根据业务返回异常信息; c、success:true表示接口请求成功,false表示接口请求失败。 d、data:请求接口成功,返回的结果。 自定义返

Lailai Monkey的博客 1285

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Result工具类,作为数据流传输对象

1、Result类作为数据传输对象,这个对象是DTO package com.chaoxing.user.beans.DTO; import com.google.gson.Gson; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; @ApiModel("响应对象") public class Result&lt

weixin_43973940的博客 2963

api接口的返回信息封装(code,message,data)与分页数据封装,通用。

源码来自github上一个Java的学习项目 mall-learning下的mall-tiny01 GitHub链接???? 先看目录结构 common api CommonPage (分页数据封装????) CommonResult (通用返回对象) IErrorCode (interface,封装API的错误码) ResultCode(枚举一些常用的API操作码) 一、对于一个简单的api,最显而易见的就是 码(code) 和 信息(message),故对于这通用的方法,就写到接

weixin_43980559的博客 1万+

SpringBoot:统一JSON信息返回

调用后端服务后的返回结果有多种类型,如:String,Integer,Boolean,List,Map等,在一个项目中,为了保持统一性,我们方法返回结果可以全部使用JSON数据格式,如下: { "code":200, "msg":"成功", "data":"JSON数据" } 其中code是本次请求处理结果对应的状态码,msg是状态码对应的解释信息,data是要返回的数据内容,可以是任意一个对象。 封装响应信息对象 public class ResponseEn.

administratop的博客 9275

SpringBoot项目实战(三)

SpringBoot实战之统一返回底层构建 1.服务统一返回介绍 真正的微服务项目是提供给多端使用的。web app (统一的调用格式!获取的结果一定是同一个类型!) 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android,Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容 例如,我们的系统要求返回的基本数据格式如下:

weixin_46036165的博客 983

SpringMVC-统一结果封装

SpringMVC-统一结果封装

qq_53098203的博客 700

统一返回数据格式

项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。 一般情况下,统一返回数据格式没有固定的格式,只要能描述清楚返回的数据状态以及要返回的具体数据就可以。但是一般会包含状态码、返回消息、数据这几部分内容 例如,我们的系统要求返回的基本数据格式如下: 列表: { "success": true, "code": 20000, "message": "成功", "data": { "items"

weixin_48948487的博客 907

SpringMVC - @ResponseBodyAdvice

该接口是4.1之后新增的,主要是在一个@ResponseBody标识或返回值类型是ResponseEntity的controller方法执行之后、在消息转换器处理之前自定义响应(自定义controller方法的返回值) 实现类注册方式: 直接在RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver中注册 在实现...

mytt_10566的博客 3333

个人管理后台制作(8)-接口返回实体类

个人管理后台制作(8)-接口返回实体类 文章目录个人管理后台制作(8)-接口返回实体类接口返回实体类 接口返回实体类 ··· @Data public class Result implements Serializable { /** * 成功标志 */ @ApiModelProperty(value = "成功标志") private boolean success = true; /** * 返回处理消息 */ @ApiModelProperty(value = "返回处理消息") priv

平淡中的精彩博客 512

【数电发票】数电发票财务对接开票接口

{“Result”:“1”,“Message”:“成功”,“ErrList”:[],“SucessList”:[{“xtlsh”:“144115188078732376”,“fpzl”:“026”,“fpdm”:“”,“fphm”:“”,“kprq”:“”,“skm”:“”,“jym”:“”,“jqbh”:“”,“ewm”:“”,“url”:“”,“kpjg”:“0”,“pdfxx”:“”,“kpfk”:“数据保存成功”}]}{“Result”:“1”,“Message”:“成功,离线开票模式!

f805122102的博客 8177
上一篇: mybatis-generator-gui.jar mybatis 自动生成代码工具带UI界面
下一篇: IP 获取问题
prefectjava
博客等级 码龄16年 26粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值