Enum定义最佳实践

Enum 在 jackson 序列化和反序列化时默认使用枚举的name(), 而一般存储的数据可能是自定义字段。可以通过一下方法改进。

  • 通过@JsonValue指定序列化的字段为code
  • 通过@JsonCreator 指定反序列化构造函数
  • 构造静态Map提高查询效率,而不是每次都去循环values()查询
public enum UserAgentEnum {
 
    IOS(1, "IOS"),
    ANDROID(2, "ANDROID"),
    WXSP(3, "微信小程序"),
    PC(4, "PC"),
    H5(5, "H5");
 
    @JsonValue
    @Getter
    private final int code;
 
    @Getter
    private final String description;
 
    UserAgentEnum(int code, String description) {
        this.code = code;
        this.description = description;
    }
 
    private static final Map<Integer, UserAgentEnum> VALUES = new HashMap<>();
 
    static {
        for (final UserAgentEnum userAgent : UserAgentEnum.values()) {
            UserAgentEnum.VALUES.put(userAgent.getCode(), userAgent);
        }
    }
 
    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    public static UserAgentEnum of(int code) {
        return UserAgentEnum.VALUES.get(code);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容