paopao/docs/tasks/任务4-Sprint-1-restful接口回应数据的统一封装的实现.md
2024-05-12 16:13:08 +08:00

131 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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