SpringBoot统一结果返回、异常处理

引言

在开发Spring Boot应用时,我们经常面临着不同的控制器方法需要处理各种不同类型的响应结果,以及在代码中分散处理异常可能导致项目难以维护的问题。你是否曾经遇到过在不同地方编写相似的返回格式,或者在处理异常时感到有些混乱?这些看似小问题的积累,实际上可能对项目产生深远的影响。统一结果返回和统一异常处理并非只是为了规范代码,更是为了提高团队的协作效率、降低项目维护的难度,并使代码更易于理解和扩展。

本文的目的是帮助你更好地理解和应用Spring Boot中的统一结果返回和统一异常处理。通过详细的讨论和实例演示,我们将为你提供一套清晰的指南,让你能够在自己的项目中轻松应用这些技术,提高代码质量,减轻开发压力。

统一结果返回

统一结果返回是一种通过定义通用的返回格式,使所有的响应结果都符合同一标准的方法。这有助于提高代码的一致性,减少重复代码的编写,以及使客户端更容易理解和处理API的响应。统一结果返回不仅规范了代码结构,还能提高团队协作效率,降低项目维护的难度。

接下来让我们一起看看在SpringBoot中如何实现统一结果返回。

1. 定义通用的响应对象

当实现统一结果返回时,需要创建一个通用的响应对象,定义成功和失败的返回情况,并确保在接口中使用这个通用返回对象。

@Setter  
@Getter  
public class ResultResponse<T> implements Serializable {  private static final long serialVersionUID = -1133637474601003587L;  /**  * 接口响应状态码  */  private Integer code;  /**  * 接口响应信息  */  private String msg;  /**  * 接口响应的数据  */  private T data;
}    
2. 定义接口响应状态码

统一结果返回的关键之一是规定一套通用的状态码。这有助于客户端更容易地理解和处理 API 的响应,同时也为开发者提供了一致的标准。通常,一些 HTTP 状态码已经被广泛接受,如:

  • 200 OK:表示成功处理请求。
  • 201 Created:表示成功创建资源。
  • 204 No Content:表示成功处理请求,但没有返回任何内容。

对于错误情况,也可以使用常见的 HTTP 状态码,如:

  • 400 Bad Request:客户端请求错误。
  • 401 Unauthorized:未授权访问。
  • 404 Not Found:请求资源不存在。
  • 500 Internal Server Error:服务器内部错误。

除了 HTTP 状态码外,你还可以定义自己的应用程序特定状态码,以表示更具体的情况。确保文档中清晰地说明了每个状态码所代表的含义,使开发者能够正确地解释和处理它们。

public enum StatusEnum {  SUCCESS(200 ,"请求处理成功"),  UNAUTHORIZED(401 ,"用户认证失败"),  FORBIDDEN(403 ,"权限不足"),  SERVICE_ERROR(500, "服务器去旅行了,请稍后重试"),  PARAM_INVALID(1000, "无效的参数"),  ;  public final Integer code;  public final String message;  StatusEnum(Integer code, String message) {  this.code = code;  this.message = message;  }  }
3. 定义统一的成功和失败的处理方法

定义统一的成功和失败的响应方法有助于保持代码一致性和规范性,简化控制器逻辑,提高代码复用性,降低维护成本,提高可读性,促进团队协作,以及更便于进行测试。

/**  * 封装成功响应的方法  * @param data 响应数据  * @return reponse  * @param <T> 响应数据类型  */  
public static <T> ResultResponse<T> success(T data) {  ResultResponse<T> response = new ResultResponse<>();  response.setData(data);  response.setCode(StatusEnum.SUCCESS.code);  return response;  
}  /**  * 封装error的响应  * @param statusEnum error响应的状态值  * @return  * @param <T>  */  
public static <T> ResultResponse<T> error(StatusEnum statusEnum) {  return error(statusEnum, statusEnum.message);  
}  /**  * 封装error的响应  可自定义错误信息* @param statusEnum error响应的状态值  * @return  * @param <T>  */  
public static <T> ResultResponse<T> error(StatusEnum statusEnum, String errorMsg) {  

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

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

相关文章

pve宿主机更改网络导致没网,pve更改ip

一、问题描述 快过年了&#xff0c;我把那台一直在用的小型服务器&#xff0c;带回去了&#xff0c;导致网络发生了变更&#xff0c;需要对网络进行调整&#xff0c;否则连不上网&#xff0c;我这里改的是宿主机&#xff0c;不是pve虚拟机中的系统。 二、解决方法 pve用的是…

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

golang rang指针数据的坑

仅为记录学习golang过程中遇到的坑 func main() {type data struct {num int}datas : []data{{1},{2},{3},{4},{5},}for _,tmp : range datas{go func(d *data) {fmt.Println(d.num)}(&tmp)}time.Sleep(10 * time.Second) }预期输出&#xff1a; 1&#xff0c;2&#xff…

蓝桥杯---加法变乘法

我们都知道:123 ….. 491225&#xff0c;现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如&#xff1a;123 ... 10*1112 ... 27*2829 ... 492015 就是符合要求的答案. 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是 提交10)…

2024年Java搭建面试题

2024年Java实战面试题&#xff08;北京&#xff09;_java 5 年 面试-CSDN博客 1、搭建docker容器 # 安装依赖的环境 yum -y install yum-utils device-mapper-persistent-data lvm2 # 设置镜像源为阿里 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/lin…

linux备份系统工具

安装 yum install rear -y 修改配置文件 vim /etc/rear/local.conf 添加如下内容 OUTPUTISOOUTPUT_URLnullBACKUPNETFSBACKUP_URLiso:///backupISO_DIR"/data/backup"NETFS_KEEP_OLD_BACKUP_COPYy 使用 rear -v mkbackup

C#学习笔记_关键字ref、out

函数传递参数 在C#中函数传递的参数&#xff0c;函数内有操作改变其值&#xff0c;并不会改变函数外参数对应变量的值&#xff0c;可见如下实例&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading…

动手学深度学习(一)深度学习介绍1

目录 一、引言 1.日常生活中的机器学习&#xff1a; 2.机器学习中的关键组件&#xff1a; 2.1 数据&#xff1a; 2.2 模型&#xff1a; 2.3 目标函数&#xff1a; 2.4 优化算法&#xff1a; 3. 各种机器学习问题&#xff1a; 3.1 监督学习&#xff1a; 3.1.1 回归&…

08-Nacos-CP与AP模式

Zookeeper&#xff1a;保证CP&#xff0c;放弃可用性&#xff1b;一旦zookeeper集群中master节点宕了&#xff0c;则会重新选举leader&#xff0c;这个过程可能非常漫长&#xff0c;在这过程中服务不可用。Eureka&#xff1a;保证AP&#xff0c;放弃一致性&#xff1b;Eureka集…

MGRE实验报告二

实验要求&#xff1a; 实验预览图&#xff1a; 实验分析&#xff1a; 1、对R1-R5配置IP地址&#xff0c;同时R1-R5每个路由器各有一个环回 2.1、对R1、R3、R4路由器开启虚拟接口1&#xff0c;分别配置隧道IP、接口封装协议&#xff0c;接口类型、定义封装源、开启伪广播功能&…

cetos7.9 install kubeadmin

第 1 步&#xff1a;禁用 SELinux&#xff08;可选但推荐&#xff09; 如何在 CentOS 7 上查找 SELinux 状态 sestatus另一种选择是运行以下 cat 命令&#xff1a; vi /etc/selinux/config SELINUXdisabled rebootcentos7 linux 安装k8s前下面操作的作用是&#xff1f; cat…

JAVA双列集合Map的特点

一次存一对元素&#xff0c;分别是 键 和 值&#xff0c;他们是一 一对应的&#xff1a;其中&#xff1a;键不可以重复&#xff0c;值可以重复这一对数据叫键值对、键值对对象、或 Entry Map 的体系结构&#xff1a; Map的常见API&#xff1a; 方式的实现&#xff1a;注意 Map …

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…

第 6 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…

数据结构与算法-二叉树-二叉树的所有路径

二叉树的所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","…

软考 系统分析师系列知识点之范围管理(3)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之范围管理&#xff08;2&#xff09; 所属章节&#xff1a; 第20章. 项目管理 第2节. 范围管理 20.2.3 范围确认和控制 在对项目范围进行了定义、编制了详细的WBS之后&#xff0c;接下来的事情就是要让项目干系人确认范围…

计算机毕业设计 | vue+springboot 超市账单管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 世界上第一个购物中心诞生于美国纽约&#xff0c;外国人迈克尔库伦开设了第一家合作商店&#xff0c;为了更好地吸引大量客流量&#xff0c;迈克尔库伦精心设计了低价策略&#xff0c;通过大量进货把商品价格压低&#xff0c;通过商店一次性集…

HCIA---OSPF实验

题目&#xff1a; 一:IP规划及配置 IP规划没有要求&#xff0c;所以我们可以去任意规划&#xff0c;只要每个网段不要重复就好 规划的IP 配置IP 先在每个ABR设备上配置环回和接口IP&#xff0c;然后每台设备上使用display ip interface brief都查看一下 R1&#xff1a; R3&…

【LUA】转载github自用二改模版——调节音量、显示七日天气、历史剪贴板、系统信息显示

二改模版笔记 自动重新加载HS function reloadConfig(files)doReload falsefor _,file in pairs(files) doif file:sub(-4) ".lua" thendoReload trueendendif doReload thenhs.reload()end end myWatcher hs.pathwatcher.new(os.getenv("HOME") .. &…

测试ASP.NET Core项目调用EasyCaching的基本用法(InMemory)

EasyCaching属于开源缓存库&#xff0c;支持基本缓存方式及高级缓存用法&#xff0c;提高用户操作缓存的效率。EasyCaching支持的缓存方式包括以下类型&#xff0c;本文学习最基础的InMemory方式的基本用法。   EasyCaching.InMemory包属于基于内存的缓存库&#xff0c;使用的…