统一封装类详解:Result
在大多数项目中,为了统一返回格式和处理结果,我们经常会定义一个通用的结果封装类。上述代码展示了一个名为Result的泛型类,用于封装接口返回的结果。
类结构
该类具有以下属性:
- code(int):状态码,表示接口调用的执行情况;
- message(String):提示信息,对接口调用结果进行描述;
- data(T):泛型数据,表示接口调用返回的数据。
同时,它提供了带参构造函数、无参构造函数以及三个相关的静态方法,并使用@Data、@NoArgsConstructor和@AllArgsConstructor注解简化开发。
构造函数
- public Result(T data)构造函数:
- 用于响应成功执行的情况,默认的状态码为200(成功);
- 接收一个类型为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封装类中加入更多的方法和功能,以满足特定的业务需求。使用该类可以统一接口返回的数据格式和处理逻辑,提高代码的可读性和维护性,同时减少重复劳动。