2024-05-12 13:12:58 +08:00
|
|
|
|
## 任务名称: Restful接口回应数据的统一封装
|
|
|
|
|
### 目标:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- 掌握Spring Boot框架基本层次结构
|
|
|
|
|
- 掌握接口的统一返回格式的设计和实现
|
|
|
|
|
- 泛型的使用
|
|
|
|
|
- lombok的使用
|
|
|
|
|
- spring配置文件中自定义属性
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 预备知识:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- 泛型
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 操作步骤:
|
|
|
|
|
|
|
|
|
|
#### 1. 创建类Result
|
2024-05-11 08:05:33 +08:00
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
package com.lk.paopao.dto.rest.response;
|
|
|
|
|
|
|
|
|
|
import lombok.Getter;
|
|
|
|
|
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
|
public class Result implements Serializable {
|
2024-05-12 13:12:58 +08:00
|
|
|
|
// 状态码
|
|
|
|
|
int code;
|
|
|
|
|
// 信息
|
2024-05-11 08:05:33 +08:00
|
|
|
|
String msg;
|
|
|
|
|
public Result(int code, String message) {
|
|
|
|
|
this.code = code;
|
|
|
|
|
this.msg = message;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
#### 2. 创建类DataResult
|
2024-05-11 08:05:33 +08:00
|
|
|
|
DataResult继承Result,添加data属性,通过泛型来确定data的类型。
|
2024-05-12 13:12:58 +08:00
|
|
|
|
|
|
|
|
|
在编程中,使用泛型来设计 `DataResult` 继承自 `Result` 并添加 `data` 属性的目的是为了提供类型安全的数据处理和返回。以下是这种设计的几个关键目的:
|
|
|
|
|
|
|
|
|
|
**类型安全**:通过使用泛型,编译器可以在编译时检查 `data` 属性的类型,确保只有正确类型的数据被处理,从而避免类型错误。
|
|
|
|
|
|
|
|
|
|
**清晰的API**:为API添加泛型参数可以清晰地表明返回的数据类型,使得API的使用方式更加明确,易于理解和使用。
|
|
|
|
|
|
|
|
|
|
**重用性**:`Result` 类可以被设计为处理通用结果的状态和信息,而 `DataResult` 作为它的子类,可以专注于处理数据内容,这样可以在不同的上下文中重用 `Result` 类的基本功能。
|
|
|
|
|
|
|
|
|
|
**解耦**:将数据和结果状态分离,可以让调用者更灵活地处理结果,而不必担心数据类型的问题。
|
|
|
|
|
|
|
|
|
|
**扩展性**:如果需要添加额外的信息到结果中(如错误信息、状态码等),可以在 `Result` 类中实现,而 `DataResult` 可以保持专注于数据。
|
|
|
|
|
|
|
|
|
|
**数据封装**:`DataResult` 可以封装对数据的访问,提供一种控制数据访问和修改的方式。
|
|
|
|
|
|
|
|
|
|
**简化错误处理**:在异常处理或错误处理中,可以统一使用 `Result` 类型来传递错误信息,而 `DataResult` 用于传递成功状态的数据。
|
|
|
|
|
|
|
|
|
|
|
2024-05-11 08:05:33 +08:00
|
|
|
|
```java
|
|
|
|
|
package com.lk.paopao.dto.rest.response;
|
|
|
|
|
|
|
|
|
|
import lombok.Getter;
|
|
|
|
|
import java.io.Serializable;
|
|
|
|
|
|
|
|
|
|
@Getter
|
|
|
|
|
public class DataResult<T> extends Result implements Serializable {
|
|
|
|
|
|
|
|
|
|
T data;
|
|
|
|
|
|
|
|
|
|
public DataResult(int code, T data, String message){
|
|
|
|
|
super(code, message);
|
|
|
|
|
this.data = data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|
2024-05-12 13:12:58 +08:00
|
|
|
|
#### 3. 实现工具类ResultUtil
|
2024-05-11 08:05:33 +08:00
|
|
|
|
|
|
|
|
|
通过工具类ResultUtil,实现ok、fail方法, 返回DataResult对象。
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
此工具类可以简化创建DataResult对象的过程。
|
2024-05-11 08:05:33 +08:00
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
package com.lk.paopao.dto.rest.response;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class ResultUtil {
|
|
|
|
|
public static <T> DataResult<T> ok(T data) {
|
|
|
|
|
return new DataResult<T>(0, data, "SUCCESS");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Result ok() {
|
|
|
|
|
return new Result(0, "SUCCESS");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Result fail(String error) {
|
|
|
|
|
return new Result(500, error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Result fail(int code, String error) {
|
|
|
|
|
return new Result(code, error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
#### 5. 自定义API接口版本号
|
2024-05-11 08:05:33 +08:00
|
|
|
|
在application.yml配置文件中添加如下配置:
|
|
|
|
|
```yaml
|
|
|
|
|
|
|
|
|
|
app:
|
|
|
|
|
version: v1
|
|
|
|
|
default:
|
|
|
|
|
head-icon: https://assets.paopao.info/public/avatar/default/joshua.png
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 技术/工具需求:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- [列出完成任务所需的技术栈、工具、软件版本等。]
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 成功标准:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- [明确完成任务的评判标准,如代码功能实现、性能指标、测试通过条件等。]
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 扩展学习(可选):
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- [提供一些额外学习资源或挑战性任务,鼓励学有余力的学生进一步探索。]
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 评估与反馈:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- [说明如何提交作业、代码审查的标准、或任何反馈收集机制。]
|
|
|
|
|
|
2024-05-12 13:12:58 +08:00
|
|
|
|
### 时间估算:
|
2024-05-11 08:05:33 +08:00
|
|
|
|
- [给出预计完成该任务所需的时间,帮助学生合理安排学习计划。]
|