全局统一返回实体

是什么?

一种约定俗成的规约,比如项目中规定你返回什么东西的时候需要用Result返回

使用场景

为请求响应信息新增code、success字段,方便判断当前请求是否正常返回

在代码中使用

1️⃣在src/main/java/.../common/convention/result路径下新建Result类和Results类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* 全局返回对象
*/
@Data
@Accessors(chain = true) //开启链式
public class Result<T> implements Serializable {

@Serial
private static final long serialVersionUID = 5679018624309023727L;

/**
* 正确返回码
*/
public static final String SUCCESS_CODE = "0";

/**
* 返回码
*/
private String code;

/**
* 返回消息
*/
private String message;

/**
* 响应数据
*/
private T data;

/**
* 请求ID
*/
private String requestId;

public boolean isSuccess() { //json小知识点:isSuccess会自动序列化成success
return SUCCESS_CODE.equals(code);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* 全局返回对象构造器
*/
public final class Results {

/**
* 构造成功响应
*/
public static Result<Void> success() {
return new Result<Void>()
.setCode(Result.SUCCESS_CODE);
}

/**
* 构造带返回数据的成功响应
*/
public static <T> Result<T> success(T data) {
return new Result<T>()
.setCode(Result.SUCCESS_CODE)
.setData(data);
}

/**
* 构建服务端失败响应
*/
public static Result<Void> failure() {
return new Result<Void>()
.setCode(BaseErrorCode.SERVICE_ERROR.code())
.setMessage(BaseErrorCode.SERVICE_ERROR.message());
}

/**
* 通过 {@link AbstractException} 构建失败响应
*/
public static Result<Void> failure(AbstractException abstractException) {
String errorCode = Optional.ofNullable(abstractException.getErrorCode())
.orElse(BaseErrorCode.SERVICE_ERROR.code());
String errorMessage = Optional.ofNullable(abstractException.getErrorMessage())
.orElse(BaseErrorCode.SERVICE_ERROR.message());
return new Result<Void>()
.setCode(errorCode)
.setMessage(errorMessage);
}

/**
* 通过 errorCode、errorMessage 构建失败响应
*/
public static Result<Void> failure(String errorCode, String errorMessage) {
return new Result<Void>()
.setCode(errorCode)
.setMessage(errorMessage);
}
}

🚩为什么需要Results?
省去重复创建Result对象以及设置相关属性的步骤

2️⃣在代码中使用
在controller中使用

1
return Results.success(...);