当前位置: 首页 > news >正文

【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);
}
}

二、存在问题

在实现统一数据返回格式的过程中,我们可能会遇到一些问题。例如,如何处理不同类型的异常?如何在不同的控制器中返回统一的数据格式?

解决方案

为了解决这些问题,我们可以采用以下方案:

  1. 定义统一的异常处理类:在 Spring Boot 中,我们可以定义一个统一的异常处理类,用于处理所有的异常。在异常处理类中,我们可以根据不同的异常类型返回不同的状态码和消息。
  2. 使用注解实现统一的数据返回格式:在 Spring Boot 中,我们可以使用注解来实现统一的数据返回格式。例如,我们可以定义一个注解 @ResponseBody,用于将返回的数据转换为 JSON 格式。
  3. 在控制器中使用统一的异常处理类:在控制器中,我们可以使用统一的异常处理类来处理所有的异常。例如,我们可以在控制器中添加一个方法 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);
}
}

三、统一功能的优点

采用统一的功能处理方式有以下优点:

  1. 提高代码的可维护性和可扩展性:采用统一的功能处理方式可以使代码更加清晰、简洁,易于维护和扩展。
  2. 提高开发效率:采用统一的功能处理方式可以减少重复的代码编写,提高开发效率。
  3. 提高用户体验:采用统一的数据返回格式可以使用户更加方便地获取数据,提高用户体验。

四、统一异常处理

在 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 应用程序时&#xff0c;为了提高代码的可维护性和可扩展性&#xff0c;我们通常会采用一些统一的功能处理方式。本文将介绍如何在 Spring Boot 中实现统一的数据返回格式、异常处理和功能处理&#xff0c;并通过一个图书管理系统的案例来…...

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录&#xff1a; 目录&#xff1a; 一、什么是单项散列函数&#xff1f; 1.1 如何验证文件是否被修改过 1.2 单项散列函数&#xff1a; 二、单向hash抗碰撞 2.1 弱抗碰撞&#xff08;Weak Collision Resistance&#xff09; 2.2 强抗碰撞&#xff08;Strong Collision Resista…...

获取不重复流水号(java)

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

【python虚拟环境管理】【mac m3】 使用pipx安装poetry

文章目录 一. 安装 pipx二. 安装Poetry1. 安装2. advanced 操作 官网文档&#xff1a;https://python-poetry.org/docs/ pipx介绍文档&#xff1a;https://blog.51cto.com/u_15064632/2570626 一. 安装 pipx pipx 用于全局安装 Python 命令行应用程序&#xff0c;同时在虚拟环…...

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分离 &#xff0c;就是指head->HEAD->c1 相对引用 ------------------- …...

openlayers 3d 地图 非三维 立体地图 行政区划裁剪 地图背景

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

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

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

‍我想我大抵是疯了,我喜欢上了写单元测试

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

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法&#xff0c;包括Visual Studio报错问题及解决方法、Visua…...

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列&#xff08;包含一块热备盘&#xff09;。 服务器存储故障&#xff1a; 该存储中的RAID5阵列1块硬盘由于未知原因离线&#xff0c;热备盘上线并开始同步数据&#xff0c;数据同步到…...

算法题目整合

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

万界星空科技AI低代码平台:重塑数字化创新边界

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

iredmail服务器安装步骤详解!如何做配置?

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

【vue深入学习第1章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析

在现代前端开发中&#xff0c;Ajax 请求是与后端进行数据交互的关键技术。Vue.js 作为一个渐进式 JavaScript 框架&#xff0c;提供了多种方式来处理 Ajax 请求&#xff0c;其中 vue-resource 是一个较为常用的库。尽管 vue-resource 在 Vue 2.x 之后不再是官方推荐的 Ajax 处理…...

JDK新特性(Lambda表达式,Stream流)

Lambda表达式&#xff1a; Lambda 表达式背后的思想是函数式编程&#xff08;Functional Programming&#xff09;思想。在传统的面向对象编程中&#xff0c;程序主要由对象和对象之间的交互&#xff08;方法调用&#xff09;构成&#xff1b;而在函数式编程中&#xff0c;重点…...

【ARM】MDK-服务器与客户端不同网段内出现卡顿问题

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

c++树(一)定义,遍历

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

YOLOv5和LPRNet的车牌识别系统

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

内容安全(深度行为检测技术、IPS、AV、入侵检测方法)

1、深度行为检测技术 深度行为检测技术&#xff1a;是一种基于深度学习和机器学习的技术&#xff0c;它通过分析用户在网络中的行为模式&#xff0c;识别异常或潜在威胁行为&#xff0c;从而保护网络安全和内容安全 分类&#xff1a; 深度包检测技术&#xff08;Deep Packet…...

MySQL双主双从实现方式

双主双从&#xff08;MM-SS&#xff09; 前言 避免单一主服务器宕机&#xff0c;集群写入能力缺失 从 1 复制 主1 &#xff0c;从 2 复制 主 2 主 1 复制 主 2&#xff0c;主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从&#xff0c; 是为了以下情景&#xff0c…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...