SpringBoot 统一返回格式

目录

一、为什么要统一返回?

二、全局异常处理代码

三、统一返回对象代码

四、使用方法

 五、结果展示


一、为什么要统一返回?

   在Spring Boot应用中,为了保持API接口的响应格式统一,通常会采用全局异常处理和自定义返回对象的方式

二、全局异常处理代码

package com.by.config;import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@RestControllerAdvice(basePackages = {"com.by"})
@Slf4j
public class MyResponseAdvice implements ResponseBodyAdvice<Object> {@ExceptionHandler(Exception.class)public Object processException(Exception ex){ResponseDTO responseDto  = new ResponseDTO();responseDto.setCode(1);responseDto.setMsg(ex.getMessage());return  responseDto;}@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {return true;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if(body instanceof  ResponseDTO){return  body;}ResponseDTO  responseDto  = new ResponseDTO();responseDto.setCode(0);responseDto.setMsg("请求成功");responseDto.setData(body);if (selectedConverterType == StringHttpMessageConverter.class) {return JSONUtil.toJsonStr(responseDto);} else {return responseDto;}}
}

三、统一返回对象代码

默认0代表成功

package com.by.config;;public class ResponseDTO {private int code;  //  0,非0 错误码private String msg; // 如果非0的时候,显示的是错误的信息private Object data;public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static  ResponseDTO success(Object data){ResponseDTO responseDTO = new ResponseDTO();responseDTO.setCode(0);responseDTO.setData(data);//返回成功return responseDTO;}public static ResponseDTO error(int code,String msg){ResponseDTO responseDTO = new ResponseDTO();responseDTO.setCode(code);responseDTO.setMsg(msg);return responseDTO;}
}

四、使用方法

在自己项目中添加如下两个代码即可。

 五、结果展示

访问自己的接口时,会统一返回结果

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

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

相关文章

JS 中的DOM 操作

目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D

Java进制转换

进制介绍 二进制&#xff1a;0B开头&#xff0c;0-1 八进制&#xff1a;0开头&#xff0c;0-7 十进制&#xff1a;0-9 十六进制&#xff1a;0x开头&#xff0c;0-9和A-F public class Binary{public static void main(String[] args){//二进制 10int n10B1010//十进制 1010int…

[协议]TCP协议

TCP,UDP协议工作在传输层 TCP基于连接&#xff1b; UDP基于非连接 TCP三次握手 UDP:不能保证丢包&#xff0c;传输稳定性不如TCP;

场外期权怎么做?

对于中国的投资者而言&#xff0c;场外期权交易目前主要由特定的券商提供&#xff0c;并且仅对机构开放。个人投资者无法直接参与此类交易&#xff0c;但可以通过与这些券商合作的机构公司进行询价和下单。场外期权交易涉及一系列严谨的步骤&#xff0c;以下是其基本流程&#…

QT中将资源文件(image、qss、qm等)封装到静态库中,程序该如何引用静态库中的资源文件

1、静态库 2、主程序中使用第三方库中的资源文件 核心代码: int main(int argc, char *argv[]) {QApplication a(argc, argv

【C++】优先级队列仿函数

目录 一.priority_queue的使用 二.仿函数 三、priority_queue的模拟实现 首先&#xff0c;我们先来了解一下什么是优先级队列 priority_queue&#xff0c;翻译为优先级队列&#xff0c;是一种容器适配器 底层容器可以是任何标准容器类模板&#xff0c;也可以是其他特定设计…

面试一个多月,我上岸了!

大家好&#xff0c;我是枫哥&#xff0c;&#x1f31f;阿里云技术专家、&#x1f4dd;资深面试官、&#x1f339;Java跳槽网课堂创始人。拥有多年一线研发经验&#xff0c;曾就职过科大讯飞、美团网、平安等公司。目前组建的团队&#xff0c;专注Java技术分享&#xff0c;一对一…

PromptPort:为大模型定制的创意AI提示词工具库

PromptPort&#xff1a;为大模型定制的创意AI提示词工具库 随着人工智能技术的飞速发展&#xff0c;大模型在各行各业的应用越来越广泛。而在与大模型交互的过程中&#xff0c;如何提供精准、有效的提示词成为了关键。今天&#xff0c;就为大家介绍一款专为大模型定制的创意AI…

九、从0开始卷出一个新项目之瑞萨RZN2L生产烧录固件(jflash擦写读外挂flash)

目录 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 7.2 jflash擦/写/读外挂flash 九、从0开始卷出一个新项目之瑞萨RZN2L 七、生产烧录固件(jflash擦写读外挂flash) 七、生产烧录固件(jflash擦/写/读外挂flash) 7.1 flash母片读写 略 7.2 jflash擦/写/读…

【Java】使用 BeanUtils.copyProperties 11个坑(注意事项)

目录 背景 坑1&#xff1a;类型不匹配 坑2&#xff1a;属性名称不一致 坑3&#xff1a;BeanUtils.copyProperties 是浅拷贝 坑4&#xff1a;Null 值覆盖 坑5&#xff1a;注意引入的包 坑6&#xff1a;Boolean 类型数据 is 开头属性的坑 坑7&#xff1a;查不到字段引用 …

【Linux】常用基本指令汇总

前言&#xff1a; 本章将介绍Linux操作系统常用的基本指令&#xff0c;另外&#xff0c;使用这些指令编辑一个shell脚本&#xff0c;方便大家理解使用。 目录 常用指令whoamipwdls关于iNode的解释验证标识文件的方式 cdtouchmkdir&#xff08;重要&#xff09;treemdir指令 &a…

Jmeter断言、关联、脚本录制

Jmeter断言 断言&#xff1a;让程序自动判断预期结果和实际结果是否一致 提示: Jmeter在请求的返回层面有个自动判断机制&#xff08;响应状态码 2xx:成功&#xff0c;4xx/5xx:失败&#xff09;但是请求成功了&#xff0c;并不代表结果一定正确&#xff0c;因此需要检测机制…

【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境

【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客 0.QT介绍 QT 是一个跨平台的应用程序开发框架&#xff0c;它提供了丰富的工具和类库&#xff0c;用于开发图形用户界面&#xff08;GUI&#xff09;程序。Qt 提供了 C 编程语言接口&#xff0c;同时也支持其他…

解释 JavaScript 中“this”的工作原理

在 JavaScript 中,this 关键字指向的对象会根据函数的调用方式而发生变化。它的工作原理可以概括为以下几点: 1&#xff1a;默认绑定: 当函数被直接调用时(不是作为对象的方法),this 会默认指向全局对象(浏览器中为 window, Node.js 中为 global)。 例如: function foo() { co…

delphi教程

1.While 循环 While 语句的语法格式为&#xff1a; While 条件表达式 do 循环语句&#xff1b; 循环语句可以是任何合法的语句&#xff0c;也可以是另一个循环语句。条件表达式返回一个逻辑 类型的值&#xff0c;当其为 True 时&#xff0c;系统执行其后的循环语句&#xff0c;…

王学岗鸿蒙开发(北向)——————(一)鸿蒙开发环境的搭建与ArkTs介绍

1&#xff0c;鸿蒙系统开始研发的时间是在2012年。 2&#xff0c;目前鸿蒙有两个开发:HarmonyOS和OpenHarmony,前者内聚AOSP(Android的东西)&#xff0c;前者是双框架结构&#xff0c;后者不是双框架结构&#xff0c;没有内置安卓。 3&#xff0c;Harmony地址 4&#xff0c;我们…

Flutter 中的 InheritedTheme 小部件:全面指南

Flutter 中的 InheritedTheme 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;InheritedTheme 是一个特殊的组件&#xff0…

文件上传漏洞之upload-labs

前提&#xff1a; 本文中的以xshell命名的均为以密码为admin的一句话木马&#xff0c;而shell命名的则是由冰蝎工具生成的木马。 pass-01&#xff1a;js前端验证 测试性的上传一个一句话木马&#xff0c;发现被拦截了&#xff0c;而且根据推测大概率是前端检测&#xff0c;于…

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎 国内PLM系统厂商中&#xff0c;要确定哪个公司的产品最受欢迎&#xff0c;需要考虑多个因素&#xff0c;包括市场份额、客户评价、技术实力、产品线完整性以及服务支持等。虽然无法直接给出一个具体的“最受欢迎”的排名&#xff…

Docker部署MYSQL8.0发现启动了却无法连接,Navicat连接后项目正常连接的解决方案

Docker部署MYSQL8.0发现启动了却无法连接&#xff0c;使用Navicat连接后项目正常连接 客户端不支持caching_sha2_password的加密方式 可进入容器处理或使用navicat连接后修改 # 进入mysql容器内容 docker exec -it mysql bash # 进入输入下面命令 ,然后输入密码 mysql -u roo…