【java深入学习第5章】Spring Boot 统一功能的实现及处理方式
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互为主从, 是为了以下情景,…...
PyTorch 3.0静态图分布式训练:如何用3行torch.compile + 2行DTensor替代自研调度器?一线大厂已全面切换
第一章:PyTorch 3.0静态图分布式训练概览 PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 后端实现高效图捕获与跨设备编译,为大规模分布式训练提供低开销、高一致性的执行基础。静态图模…...
OpenClaw自动化报告:Qwen3.5-4B-Claude周报生成与邮件发送
OpenClaw自动化报告:Qwen3.5-4B-Claude周报生成与邮件发送 1. 为什么选择OpenClaw处理周报任务 每周五下午,我都会面临同样的困扰——需要从零散的会议记录、Git提交和即时通讯对话中提取关键信息,整理成一份结构清晰的周报。这个耗时1-2小…...
TypeScript——编译器和编译选项
编译器和编译选项 1、编译器1.1、安装编译器1.1.1、--help、--all1.1.2、--version 2、编译程序2.1、编译单个文件2.2、编译多个文件2.3、--watch和-w2.4、--presserveWatchOutput 2、编译选项2.1、编译选项风格2.2、使用编译选项2.3、严格类型检查2.3.1、--strict2.3.2、--nol…...
ubuntu安装openclaw接入智谱大模型和微信QQ通道配置
前置系统准备 虚拟机安装ubuntu 24.04.3 LTS server版 无需GUI 智谱api注册 注册方式如下 智谱AI 国内版 https://open.bigmodel.cn/ 也可以用我的带邀请 https://www.bigmodel.cn/invite?icodeK2pjkdweVsRYJySj5DADo0jPr3uHog9F4g5tjuOUqno%3D添加apikey https://www.bigm…...
腾讯地图SDK隐私协议合规接入实战:你的App真的合法显示地图了吗?
腾讯地图SDK隐私合规实战:从法律条文到代码落地的全流程指南 当你的App因为地图功能被应用商店拒审时,当用户投诉你的应用"偷偷收集位置信息"时,当合规团队发来长达20页的整改清单时——这些场景正在成为移动开发者的日常。去年某社…...
电视盒变身记:3步打造你的家庭全能服务器,闲置设备重获新生!
电视盒变身记:3步打造你的家庭全能服务器,闲置设备重获新生! 【免费下载链接】amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic、Rockchip和Allwinner盒子构建的Armbian系统镜像,支持多种设备,允…...
OpenClaw 3.28重磅发布:Grok搜索内置,高危操作迎来“保命”拦截机制
引言: 不仅仅是“草台”后的补救,更是智能体操作系统的成人礼 就在前两天,OpenClaw 之父 Peter 的一次“漏打包”操作,直接导致 3.22 版本大面积白屏,让无数开发者以为自己辛辛苦苦养了一周的“赛博小龙虾”就这么“死…...
ElastAlert vs Prometheus:2024年日志告警与指标告警终极选型指南
ElastAlert vs Prometheus:2024年日志告警与指标告警终极选型指南 【免费下载链接】elastalert Easy & Flexible Alerting With ElasticSearch 项目地址: https://gitcode.com/gh_mirrors/el/elastalert 在当今复杂的IT环境中,有效的监控告警…...
如何用ImageSharp实现高效大数据处理:数据流管道与IAsyncEnumerable应用指南
如何用ImageSharp实现高效大数据处理:数据流管道与IAsyncEnumerable应用指南 【免费下载链接】ImageSharp :camera: A modern, cross-platform, 2D Graphics library for .NET 项目地址: https://gitcode.com/gh_mirrors/im/ImageSharp ImageSharp是一个现代…...
毫米波雷达信号处理入门:用MATLAB解析DCA1000采集的IWR6843原始数据(附代码)
毫米波雷达信号处理实战:从原始数据到距离谱的MATLAB实现 在自动驾驶和智能感知领域,毫米波雷达因其全天候工作能力和精确的距离测量特性,成为不可或缺的传感器。当开发者完成硬件配置和数据采集后,面对adc_data.bin这样的原始数据…...
