访问网站提示输入用户名密码,diy网站建设系统源码,注册贸易公司需要什么条件,找资源的关键词有哪些Spring 项目返回值枚举类编写技巧
在 Spring 项目中#xff0c;使用枚举类来统一管理返回值和状态码是一种非常优雅的实现方式。这不仅能提升代码的可读性和维护性#xff0c;还能避免在代码中硬编码字符串或数字来表示状态码。本文将以 ReturnCodeEnum 为例#xff0c;介绍…Spring 项目返回值枚举类编写技巧
在 Spring 项目中使用枚举类来统一管理返回值和状态码是一种非常优雅的实现方式。这不仅能提升代码的可读性和维护性还能避免在代码中硬编码字符串或数字来表示状态码。本文将以 ReturnCodeEnum 为例介绍如何编写和使用枚举类。
1. 枚举值定义
枚举类定义了项目中的所有状态码和相应的描述信息。每个枚举值代表一种返回状态如操作成功、操作失败、权限问题等。通过这种方式我们可以在项目的不同模块中使用相同的状态码保证了一致性。
示例
Getter
public enum ReturnCodeEnum {/**操作失败**/RC999(999, 操作XXX失败),/**操作成功**/RC200(200, success),/**服务降级**/RC201(201, 服务开启降级保护,请稍后再试!),/**热点参数限流**/RC202(202, 热点参数限流,请稍后再试!),/**系统规则不满足**/RC203(203, 系统规则不满足要求,请稍后再试!),/**授权规则不通过**/RC204(204, 授权规则不通过,请稍后再试!),/**无访问权限**/RC403(403, 无访问权限,请联系管理员授予权限),RC401(401, 匿名用户访问无权限资源时的异常),RC404(404, 404页面找不到的异常),/**服务异常**/RC500(500, 系统异常请稍后重试),RC375(375, 数学运算异常请稍后重试),INVALID_TOKEN(2001, 访问令牌不合法),ACCESS_DENIED(2003, 没有权限访问该资源),CLIENT_AUTHENTICATION_FAILED(1001, 客户端认证失败),USERNAME_OR_PASSWORD_ERROR(1002, 用户名或密码错误),BUSINESS_ERROR(1004, 业务逻辑异常),UNSUPPORTED_GRANT_TYPE(1003, 不支持的认证模式);/** 自定义状态码 **/private final String code;/** 自定义描述 **/private final String message;// 构造函数ReturnCodeEnum(String code, String message) {this.code code;this.message message;}
}2. 枚举类构造方法
在 ReturnCodeEnum 中每个枚举常量都带有两个参数code状态码和 message描述信息。通过构造方法我们可以将这些值初始化并赋予给每个枚举常量。这种设计方式非常简洁高效确保了所有的状态码和描述信息在定义时就被固定下来避免了运行时的动态赋值从而提高了安全性和可维护性。
示例
ReturnCodeEnum(String code, String message) {this.code code;this.message message;
}3. 遍历枚举
有时我们需要根据返回码来查找对应的枚举值。Java 提供了内置的 values() 方法它可以遍历所有枚举常量。我们可以通过遍历来实现查找功能。
遍历方法 V1使用 for 循环
public static ReturnCodeEnum getReturnCodeEnum(String code) {for (ReturnCodeEnum element : ReturnCodeEnum.values()) {if (element.getCode().equalsIgnoreCase(code)) {return element;}}return null;
}遍历方法 V2使用 Java 8 Stream API
利用 Java 8 提供的 Stream 流操作代码更加简洁高效。filter 用于筛选符合条件的枚举值findFirst() 用于获取第一个符合条件的值。
public static ReturnCodeEnum getReturnCodeEnumV2(String code) {return Arrays.stream(ReturnCodeEnum.values()).filter(x - x.getCode().equalsIgnoreCase(code)).findFirst().orElse(null);
}4. 如何在项目中使用
枚举类在实际项目中的应用非常广泛。我们可以将 ReturnCodeEnum 用于构建统一的 API 响应使每个接口的返回值格式一致。以下是一个示例展示了如何使用 ReturnCodeEnum 构建 API 响应。
示例代码
public class ResponseUtil {public static MapString, Object buildResponse(ReturnCodeEnum returnCode) {MapString, Object response new HashMap();response.put(code, returnCode.getCode());response.put(message, returnCode.getMessage());return response;}
}在控制器中我们可以直接调用 ResponseUtil 来构建响应
RestController
RequestMapping(/api)
public class ApiController {GetMapping(/success)public MapString, Object successResponse() {return ResponseUtil.buildResponse(ReturnCodeEnum.RC200);}GetMapping(/fail)public MapString, Object failResponse() {return ResponseUtil.buildResponse(ReturnCodeEnum.RC999);}
}5. 扩展异常处理与国际化
枚举类还可以与异常处理机制结合统一管理异常响应。结合 Spring 的国际化支持你还可以为不同语言的用户返回不同的错误信息。只需要将 message 替换为国际化资源文件中的键值即可。通过这种方法所有的状态码和描述都被集中管理减少了重复代码和硬编码问题。