统一封装类详解:Result
在大多数项目中,为了统一返回格式和处理结果,我们经常会定义一个通用的结果封装类。上述代码展示了一个名为Result
的泛型类,用于封装接口返回的结果。
该类具有以下属性:
code
(int):状态码,表示接口调用的执行情况;message
(String):提示信息,对接口调用结果进行描述;data
(T):泛型数据,表示接口调用返回的数据。同时,它提供了带参构造函数、无参构造函数以及三个相关的静态方法,并使用@Data
、@NoArgsConstructor
和@AllArgsConstructor
注解简化开发。
public Result(T data)
构造函数:
T
的参数data
,表示接口调用返回的数据。public Result(T data, boolean success, String message)
构造函数:
success
参数为true
时,表示执行成功,状态码为200(成功)、提示信息为"success";success
参数为false
时,表示执行失败,可以自定义错误的状态码和提示信息;T
的参数data
,表示接口调用返回的数据;boolean
的参数success
,表示执行的成功与否;String
的参数message
,作为失败时的提示信息。public Result(int code, String message)
构造函数:
int
的参数code
,表示自定义的状态码;String
的参数message
,表示接口调用结果的描述信息。该封装类还提供了两个静态方法:
public static <T> Result<T> fail(String message)
:
String
的参数message
,表示失败时的提示信息。public static <T> Result<T> fail(int code, String message)
:
int
的参数code
,表示自定义的状态码;String
的参数message
,表示接口调用结果的描述信息。@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
private int code;
private String message;
private T data;
public Result(T data) {
this.code = 200;
this.message = "success";
this.data = data;
}
public Result(T data, boolean success, String message) {
if (success) {
this.code = 200;
this.message = "success";
} else {
this.code = 500;
this.message = message;
}
this.data = data;
}
public Result(int code, String message) {
this.code = code;
this.message = message;
this.data = null;
}
public static <T> Result<T> success(T data) {
return new Result<>(data);
}
public static <T> Result<T> fail(String message) {
return new Result<>(500, message);
}
public static <T> Result<T> fail(int code, String message) {
return new Result<>(code, message);
}
}
以下是一些使用示例,展示了如何使用Result
封装类来处理接口返回结果:
@GetMapping("/user/{id}")
public Result<User> getUserById(@PathVariable int id) {
User user = userService.getUserById(id);
if (user == null) {
return Result.fail("User not found");
}
return new Result<>(user);
}
@PostMapping("/login")
public Result<String> login(@RequestBody LoginRequest request) {
boolean isValid = userService.authenticate(request.getUsername(), request.getPassword());
if (isValid) {
// 返回登录成功的结果
return new Result<>("Login successful");
} else {
// 返回登录失败的结果,并自定义错误状态码和提示信息
return Result.fail(401, "Invalid username or password");
}
}
你可以根据项目需求,在Result
封装类中加入更多的方法和功能,以满足特定的业务需求。使用该类可以统一接口返回的数据格式和处理逻辑,提高代码的可读性和维护性,同时减少重复劳动。