首页 > 解决方案 > 基于枚举字段的 Java 类

问题描述

我在这里处理 JWT 并设置自定义字段。所有这些自定义字段都在枚举中描述:

public enum JwtFields {
    userId,
    manyOtherCustomFieldsBellow,
    blaBlaBla
}

因此,每当我创建令牌而不是为键传递字符串时,我都会使用枚举,因为它更快更安全。

Claims claims = Jwts.claims().setSubject(userId);
claims.put(JwtFields.someCustomFieldFromEnum.name(), "someValue")

现在,一旦我检查接收到的令牌是否有效并且所有必要的自定义字段都存在,我想将其反序列化到某个TokenDecoded类并将其附加到请求有效负载,因此每当我处理请求时,我都会拥有所有值和字段来自 JWT 令牌。

但是,该反序列化类几乎包含枚举中的所有字段,如果明天我将向枚举添加新字段,我还必须手动更新我的TokenDecoded类以包含该新的自定义字段。

问题: 我怎样才能使这个TokenDecoded类基于枚举字段,所以如果我向枚举添加一个新字段,它将自动出现在TokenDecoded?是否涉及反射?还是可以更简单地实现?

标签: javareflectionenumsjwt

解决方案


Lombok提供了一个相反的功能:如果你在一个类中定义你的字段,你可以注释它以@FieldNameConstants(asEnum = true)根据字段名称生成一个枚举。或者,没有asEnum参数,public static final String如果您只需要将其作为字符串,您将获得字段的 s。


推荐阅读