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);
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容