教育类型网站/希爱力
Spring Boot 统一功能处理
在开发 Web 应用程序时,为了提高代码的可维护性和可扩展性,我们通常会采用一些统一的功能处理方式。本文将介绍如何在 Spring Boot 中实现统一的数据返回格式、异常处理和功能处理,并通过一个图书管理系统的案例来演示这些功能的实现。
一、统一数据返回格式
在 Web 应用程序中,统一的数据返回格式非常重要。为了实现这一点,我们可以定义一个统一的数据返回格式,例如:
{
"code": 200,
"message": "操作成功",
"data": {}
}
其中,code
表示返回的状态码,message
表示返回的消息,data
表示返回的数据。在实际开发中,我们可以根据需要自定义返回的数据格式。
下面是一个使用 Spring Boot 实现统一数据返回格式的示例代码:
public class ApiResponse<T> {
private int code;
private String message;
private T data;public ApiResponse(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}// Getters and setters
}
在控制器中使用统一的数据返回格式:
@RestController
@RequestMapping("/api")
public class BookController {@Autowired
private BookService bookService;@GetMapping("/books")
public ApiResponse<List<Book>> getBooks() {
List<Book> books = bookService.getBooks();
return new ApiResponse<>(200, "操作成功", books);
}
}
二、存在问题
在实现统一数据返回格式的过程中,我们可能会遇到一些问题。例如,如何处理不同类型的异常?如何在不同的控制器中返回统一的数据格式?
解决方案
为了解决这些问题,我们可以采用以下方案:
- 定义统一的异常处理类:在 Spring Boot 中,我们可以定义一个统一的异常处理类,用于处理所有的异常。在异常处理类中,我们可以根据不同的异常类型返回不同的状态码和消息。
- 使用注解实现统一的数据返回格式:在 Spring Boot 中,我们可以使用注解来实现统一的数据返回格式。例如,我们可以定义一个注解
@ResponseBody
,用于将返回的数据转换为 JSON 格式。 - 在控制器中使用统一的异常处理类:在控制器中,我们可以使用统一的异常处理类来处理所有的异常。例如,我们可以在控制器中添加一个方法
handleException
,用于处理所有的异常。
下面是一个使用注解实现统一数据返回格式的示例代码:
@RestController
public class BookController {@Autowired
private BookService bookService;@GetMapping("/books")
@ResponseBody
public ApiResponse<List<Book>> getBooks() {
List<Book> books = bookService.getBooks();
return new ApiResponse<>(200, "操作成功", books);
}
}
案例代码修改
在实际项目中,我们可以通过修改现有的代码来实现统一的数据返回格式和异常处理。下面是一个图书管理系统的案例代码修改示例:
@RestController
@RequestMapping("/api")
public class BookController {@Autowired
private BookService bookService;@GetMapping("/books")
public ApiResponse<List<Book>> getBooks() {
List<Book> books = bookService.getBooks();
return new ApiResponse<>(200, "操作成功", books);
}
}
三、统一功能的优点
采用统一的功能处理方式有以下优点:
- 提高代码的可维护性和可扩展性:采用统一的功能处理方式可以使代码更加清晰、简洁,易于维护和扩展。
- 提高开发效率:采用统一的功能处理方式可以减少重复的代码编写,提高开发效率。
- 提高用户体验:采用统一的数据返回格式可以使用户更加方便地获取数据,提高用户体验。
四、统一异常处理
在 Spring Boot 中,我们可以使用注解来实现统一的异常处理。例如,我们可以定义一个注解 @ExceptionHandler
,用于处理所有的异常。在注解中,我们可以指定要处理的异常类型和返回的状态码和消息。
下面是一个使用注解实现统一异常处理的示例代码:
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)
public ResponseEntity<ApiResponse<Object>> handleException(Exception e) {
ApiResponse<Object> response = new ApiResponse<>(500, e.getMessage(), null);
return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
五、案例代码(图书管理系统)
1. login.html
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="/login" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password"><br>
<button type="submit">登录</button>
</form>
</body>
</html>
2. book_update.html
<!DOCTYPE html>
<html>
<head>
<title>更新图书</title>
</head>
<body>
<form action="/books/update" method="post">
<label for="id">图书ID:</label>
<input type="text" id="id" name="id"><br>
<label for="title">标题:</label>
<input type="text" id="title" name="title"><br>
<label for="author">作者:</label>
<input type="text" id="author" name="author"><br>
<button type="submit">更新</button>
</form>
</body>
</html>
3. book_add.html
<!DOCTYPE html>
<html>
<head>
<title>添加图书</title>
</head>
<body>
<form action="/books/add" method="post">
<label for="title">标题:</label>
<input type="text" id="title" name="title"><br>
<label for="author">作者:</label>
<input type="text" id="author" name="author"><br>
<button type="submit">添加</button>
</form>
</body>
</html>
4. book_list.html
<!DOCTYPE html>
<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table border="1">
<tr>
<th```html<th>ID</th><th>标题</th><th>作者</th><th>操作</th></tr><!-- 这里可以使用模板引擎如 Thymeleaf 来动态生成表格内容 --><tr th:each="book : ${books}"><td th:text="${book.id}">1</td><td th:text="${book.title}">书名</td><td th:text="${book.author}">作者</td><td><a th:href="@{/books/update(id=${book.id})}">更新</a><a th:href="@{/books/delete(id=${book.id})}">删除</a></td></tr></table>
</body>
</html>
完整案例代码
为了更好地展示统一功能处理的实现,下面是一个完整的图书管理系统的示例代码,包括控制器、服务和异常处理。
1. Book.java (实体类)
public class Book {private Long id;private String title;private String author;// Getters and setters
}
2. BookService.java (服务类)
@Service
public class BookService {private List<Book> books = new ArrayList<>();public List<Book> getBooks() {return books;}public void addBook(Book book) {books.add(book);}public void updateBook(Book book) {for (Book b : books) {if (b.getId().equals(book.getId())) {b.setTitle(book.getTitle());b.setAuthor(book.getAuthor());break;}}}public void deleteBook(Long id) {books.removeIf(book -> book.getId().equals(id));}
}
3. BookController.java (控制器)
@RestController
@RequestMapping("/api")
public class BookController {@Autowiredprivate BookService bookService;@GetMapping("/books")public ApiResponse<List<Book>> getBooks() {List<Book> books = bookService.getBooks();return new ApiResponse<>(200, "操作成功", books);}@PostMapping("/books/add")public ApiResponse<Void> addBook(@RequestBody Book book) {bookService.addBook(book);return new ApiResponse<>(200, "添加成功", null);}@PostMapping("/books/update")public ApiResponse<Void> updateBook(@RequestBody Book book) {bookService.updateBook(book);return new ApiResponse<>(200, "更新成功", null);}@DeleteMapping("/books/delete/{id}")public ApiResponse<Void> deleteBook(@PathVariable Long id) {bookService.deleteBook(id);return new ApiResponse<>(200, "删除成功", null);}
}
4. GlobalExceptionHandler.java (全局异常处理)
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<ApiResponse<Object>> handleException(Exception e) {ApiResponse<Object> response = new ApiResponse<>(500, e.getMessage(), null);return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);}
}
5. ApiResponse.java (统一返回格式)
public class ApiResponse<T> {private int code;private String message;private T data;public ApiResponse(int code, String message, T data) {this.code = code;this.message = message;this.data = data;}// Getters and setters
}
总结
通过本文的介绍,我们了解了如何在 Spring Boot 中实现统一的数据返回格式和异常处理,并通过一个图书管理系统的案例代码演示了这些功能的实现。采用统一的功能处理方式可以提高代码的可维护性和可扩展性,提高开发效率,并且可以提供更好的用户体验。希望本文对你有所帮助。
AI写论文,AI4.0技术加持,有需速入👉:AI写论文 🔥🔥🔥
相关文章:

【java深入学习第5章】Spring Boot 统一功能的实现及处理方式
Spring Boot 统一功能处理 在开发 Web 应用程序时,为了提高代码的可维护性和可扩展性,我们通常会采用一些统一的功能处理方式。本文将介绍如何在 Spring Boot 中实现统一的数据返回格式、异常处理和功能处理,并通过一个图书管理系统的案例来…...

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)
目录: 目录: 一、什么是单项散列函数? 1.1 如何验证文件是否被修改过 1.2 单项散列函数: 二、单向hash抗碰撞 2.1 弱抗碰撞(Weak Collision Resistance) 2.2 强抗碰撞(Strong Collision Resista…...

获取不重复流水号(java)
一:概述 很多业务场景都需要获取不重复的业务流水号,当微服务项目或服务多节点部署时,获取流水号场景使用分布式锁性能低下,可以基于数据库行锁实现获取不重复流水号。 二:创建流水号数据库 CREATE TABLE serial (i…...

【python虚拟环境管理】【mac m3】 使用pipx安装poetry
文章目录 一. 安装 pipx二. 安装Poetry1. 安装2. advanced 操作 官网文档:https://python-poetry.org/docs/ pipx介绍文档:https://blog.51cto.com/u_15064632/2570626 一. 安装 pipx pipx 用于全局安装 Python 命令行应用程序,同时在虚拟环…...

git使用以及理解
git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 ,就是指head->HEAD->c1 相对引用 ------------------- …...

openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景
这是实践效果 如果没有任何基础 就看这个专栏:http://t.csdnimg.cn/qB4w0 这个专栏里有从最简单的地图到复杂地图的示例 最终效果: 线上示例代码: 想要做这个效果 如果你的行政区划编辑点较多 可能会有卡顿感 如果出现卡顿感需要将边界点相应…...

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南
0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频: https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解: https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…...

我想我大抵是疯了,我喜欢上了写单元测试
前言 大家好我是聪。相信有不少的小伙伴喜欢写代码,但是对于单元测试这些反而觉得多此一举,想着我都在接口文档测过了!还要写什么单元测试!写不了一点!! 由于本人也是一个小小程序猿🙉…...

【Visual Studio】Visual Studio使用技巧及报错解决合集
目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法,包括Visual Studio报错问题及解决方法、Visua…...

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例
服务器存储数据恢复环境: 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列(包含一块热备盘)。 服务器存储故障: 该存储中的RAID5阵列1块硬盘由于未知原因离线,热备盘上线并开始同步数据,数据同步到…...

算法题目整合
文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j]&…...

万界星空科技AI低代码平台:重塑数字化创新边界
在这个日新月异的数字化时代,技术的飞速发展正以前所未有的力量重塑着每一个行业。企业如何在瞬息万变的市场环境中保持竞争力,实现业务的快速迭代与创新? 重塑开发模式,加速数字化转型 传统软件开发周期长、成本高、门槛高&…...

iredmail服务器安装步骤详解!如何做配置?
iredmail服务器安全性设置指南?怎么升级邮件服务器? iredmail是一个功能强大的邮件服务器解决方案,它集成了多个开源软件,使您能够快速部署和管理邮件服务。AokSend将逐步引导您完成安装过程,无需深入的编程知识即可轻…...

【vue深入学习第1章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析
在现代前端开发中,Ajax 请求是与后端进行数据交互的关键技术。Vue.js 作为一个渐进式 JavaScript 框架,提供了多种方式来处理 Ajax 请求,其中 vue-resource 是一个较为常用的库。尽管 vue-resource 在 Vue 2.x 之后不再是官方推荐的 Ajax 处理…...

JDK新特性(Lambda表达式,Stream流)
Lambda表达式: Lambda 表达式背后的思想是函数式编程(Functional Programming)思想。在传统的面向对象编程中,程序主要由对象和对象之间的交互(方法调用)构成;而在函数式编程中,重点…...

【ARM】MDK-服务器与客户端不同网段内出现卡顿问题
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录不同网段之间的请求发送情况以及MDK网络版license文件内设置的影响。 2、 问题场景 客户使用很久的MDK网络版,在获取授权时都会出现4-7秒的卡顿,无法对keil进行任何操作,彻底…...

c++树(一)定义,遍历
目录 树的定义 树的基本术语 树的初始起点:我们定义为根 树的层次: 树的定义: 树的性质 性质1: 性质2: 树形结构存储的两种思路 树的遍历模板 树上信息统计方式1-自顶向下统计 树上信息统计方式2-自底向上统…...

YOLOv5和LPRNet的车牌识别系统
车牌识别系统 YOLOv5和LPRNet的车牌识别系统结合了深度学习技术的先进车牌识别解决方案。该系统整合了YOLOv5目标检测框架和LPRNet文本识别模型 1. YOLOv5目标检测框架 YOLO是一种先进的目标检测算法,以其实时性能和高精度闻名。YOLOv5是在前几代基础上进行优化的…...

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)
1、深度行为检测技术 深度行为检测技术:是一种基于深度学习和机器学习的技术,它通过分析用户在网络中的行为模式,识别异常或潜在威胁行为,从而保护网络安全和内容安全 分类: 深度包检测技术(Deep Packet…...

MySQL双主双从实现方式
双主双从(MM-SS) 前言 避免单一主服务器宕机,集群写入能力缺失 从 1 复制 主1 ,从 2 复制 主 2 主 1 复制 主 2,主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从, 是为了以下情景,…...

pico+unity手柄和摄像机控制初级设置
1、摄像头配置 摄像头模式、floor是追踪原点类型(将根据设备检测到地面的高度来计算追踪原点), Device 模式时,为通常理解的 Eye 模式,不会将根据设备检测到地面的高度来计算追踪原点 选择floor时,修改相…...

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table
文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…...

TS相较于JS有什么优缺点
TypeScript(TS)是JavaScript的一个超集,它添加了静态类型检查和编译时的强大功能,目的是提高代码质量和维护性。相较于JavaScript,TS的主要优点和缺点如下: 优点: 类型安全性:通过…...

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2
目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记,杂乱,误点的师傅可以掉了…...

vue3前端开发-执行npm run dev提示报错怎么解决
vue3前端开发-执行npm run dev提示报错怎么解决!今天在本地安装初始化了一个vue3的案例demo。但是当我执行npm run dev想启动它时报错了说,找不到dev。让我检查package.json文件是否包含dev。如下图所示: 实际上,不必惊慌…...

https 单向认证和双向认证
单向认证 单向认证是客户端(通常是浏览器)验证服务器的身份。服务器向客户端提供数字证书,客户端通过验证该证书的真实性来确认与服务器的连接是安全的。 服务器提供证书:服务器向客户端提供一个数字证书,用于验证服务器的身份。客户端验证服务器:客户端验证服务器的证书…...

Python中Selenium 和 keyboard 库的使用
文章目录 一、Selenium基本使用2.等待元素加载常用操作 keyboard基本使用与 Selenium 联合使用 一、Selenium Selenium 是一个用于浏览器自动化的工具。它可以模拟用户与网页的交互,如点击按钮、填写表单、导航页面等。Selenium 支持多种编程语言,包括 …...

网络安全协议系列
目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…...

.net core appsettings.json 配置 http 无法访问
1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();...

opencv—常用函数学习_“干货“_11
目录 二九、图像累加 将输入图像累加到累加图像中 (accumulate) 将输入图像加权累加到累加图像中 (accumulateWeighted) 将输入图像的平方累加到累加图像中 (accumulateSquare) 将两个输入图像的乘积累加到累加图像中 (accumulateProduct) 解释 三十、随机数与添加噪声 …...