【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写论文 🔥🔥🔥

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

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

相关文章

论文翻译:Rethinking Interpretability in the Era of Large Language Models

https://arxiv.org/abs/2402.01761 在大型语言模型时代的可解释性再思考 摘要 在过去十年中&#xff0c;随着越来越大的数据集和深度神经网络的兴起&#xff0c;可解释机器学习领域的兴趣迅速增长。同时&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在广泛的任务中…

k8s之client-go:golang与k8s交互的桥梁

文章目录 前言示例总结 前言 k8s是一个非常成熟且强大的容器自动化编排引擎&#xff0c;对于这样一个利器&#xff0c;k8s官方提供了clientgo用来给我们使用golang去接入k8s&#xff0c;通过k8s的api来对k8s中的资源进行操作 通过client-go实现对k8s集群中资源对象(包括deploy…

TypeScript 基础类型(一)

简介 它是 JavaScript 的超集&#xff0c;具有静态类型检查和面向对象编程的特性。TypeScript 的出现&#xff0c;为开发者提供了一种更加严谨和高效的开发方式。 主要特点&#xff1a; 、静态类型检查。 通过静态类型检查&#xff0c;开发者可以在编译时发现错误&#xff0…

QQ频道导航退出

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140413538 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

Jquery常用操作汇总,dom操作,ajax请求

这段时间在写一些小Demo&#xff0c;用的都是很远古的Jquery,哈哈哈&#xff0c;但是呢也挺好玩儿的。想着记录一下。 题外话&#xff1a;补充一些自己欠缺的前端知识&#xff0c;&#xff08;我的前端学的比较乱&#xff0c;哈哈哈&#xff0c;原生的js不是很熟&#xff0c;&a…

链表的回文结构(链表的中间节点+反转链表)

链表的回文结构 一.链表的中间节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 二.返回倒数第k个节点思路1&#xff1a;暴力求解思路2&#xff1a;快慢指针 三.反转链表思路1&#xff1a;头插法思路2&#xff1a;反转指针的指向 四.链表的回文结构思路1&#xff1a;利…

「C++系列」一篇文章讲透【运算符】

文章目录 一、运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 条件运算符&#xff08;三元运算符&#xff09;7. 成员访问运算符8. 指针和地址运算符9. 类型转换运算符10. 其他运算符 二、其他特殊运算符1. 成员访问运算符2. 指针和地址运算符3. 类…

Laravel入门:快速启动你的第一个应用

当然&#xff01;下面是关于如何使用Laravel快速启动你的第一个应用的教程。 Laravel入门&#xff1a;快速启动你的第一个应用 1. 简介 Laravel是一个现代化的PHP框架&#xff0c;以其优雅的语法和丰富的功能广受欢迎。本教程将引导你从零开始创建一个简单的Laravel应用。 2…

python的自省机制(改bug有用)

在 Python 中&#xff0c;自省&#xff08;Introspection&#xff09;机制是指程序在运行时能够获取自身的信息&#xff0c;例如对象的类型、属性、方法等。 Python 提供了一些内置函数和特殊属性来支持自省。以下是一些常见的例子&#xff1a; type() 函数&#xff1a;返回对象…

Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x

目录 开始 Exporter 采集数据&#xff0c;Prometheus 拉取并监控 Linux MySQL Redis RabbitMQ Docker SpringBoot 3.x 开始 Exporter 采集数据&#xff0c;Prometheus 拉取并监控 Note&#xff1a;Prometheus 和 Grafana 的部署已经在前面的章节中讲过了&#xff0c;不…

Solana Blink和SEND的崛起:技术与市场效应的结合

随着Solana生态系统的不断发展&#xff0c;新的项目和技术不断涌现&#xff0c;吸引了大量的关注和投资。最近&#xff0c;Solana的Blink项目及其相关的SEND代币成为了市场的焦点&#xff0c;引发了广泛的讨论和投资热潮。本文将探讨Blink和SEND的技术创新、市场表现以及未来的…

C++中的自定义数据类型:类和结构体

目录 自定义数据类型(1)类A.面向对象的四大特征B.What&#xff08;什么是类&#xff09;C.Why&#xff08;类的作用&#xff09;D.How&#xff08;如何定义和使用类&#xff09; (2)结构体 自定义数据类型 (1)类 A.面向对象的四大特征 谈到类&#xff0c;就必须讲一下面向对…

基于MATHCAD的傅里叶级数模拟和方波图像绘制

一、MATHCAD软件简介 MATHCAD是一款功能强大的数学计算软件&#xff0c;它允许用户以类似手写公式的方式输入数学表达式&#xff0c;并即时显示计算结果和图形。在工程研究和学术写作的世界里&#xff0c;MathCAD以其强大的符号运算能力和直观的数学书写体验脱颖而出。MATHCAD…

三相PWM整流器PI双闭环控制Simulink

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Rb&#xff09;软件。建议采用matlab2017 Rb及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.拓扑结构&#xff1a; 3.模型算法架构&#xff1a; 4.仿真算法&#xff1a; &am…

Lua协程(同步的多线程)

1.coroutine.create( func ) 创建一个协程&#xff0c;返回co&#xff08;coroutine&#xff09;&#xff0c;参数是一个函数&#xff0c;当调用resume时就唤醒co并调用函数 2.coroutine.resume(co, 函数参数们) 启动协程co并传入协程调用函数的参数&#xff0c;可以带回协程…

前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法

前言 本文总结Web应用开发中文件上传、下载的方法&#xff0c;即从前端表单输入文件并封装表单数据&#xff0c;然后请求后端服务器的处理过程&#xff1b;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明&#xff0c;并给出了前端常用的axios库的请…

[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性

目录 背景描述 用浏览器访问&#xff0c;正常返回 ​编辑 AHK v2官方示例源代码 AHK v2运行结果报错(0x80092004) 找不到对象或属性 用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性 附&#xff1a; 用Apifox访问&#xff0c;也正常返回 AHK v1 …

克洛托光电再度合作福晶科技,高精度光学镜头装调仪正式交付

近日&#xff0c;苏州东方克洛托光电技术有限公司&#xff08;下称“克洛托光电”&#xff09;高精度光学镜头装调仪正式交付于福建福晶科技股份有限公司&#xff0c;研发人员在现场完成设备安装调试并介绍使用方法。据悉&#xff0c;这已是双方第二次展开合作。 前沿产品力助推…

django之 annotate,aggrate

annotate&#xff1a;annotate() 不是一个终止子句。 annotate() 子句的输出是一个 QuerySet&#xff1b;这个 QuerySet 可以使用任何其他 QuerySet 操作进行修改&#xff0c;包括 filter()、order_by()&#xff0c;甚至对 annotate() 的额外调用。"增加一列属性" ag…

k8s中kubesphere开启devops总是报错解决

自己搭建过k8s集群遇到各种形式的报错&#xff0c;手动去解决&#xff0c;其实这都是由程序自动去解决的问题&#xff0c;由于自己的的失误导致问题不得不去亲自解决是虽然管用但费时费力&#xff0c;在kubersphere开启devops本身没什么问题&#xff0c;但由于虚拟机配置低导致…