簡體   English   中英

如何使用Jackson將Java Enums序列化和反序列化為JSON對象

[英]How to serialize and deserialize Java Enums as JSON objects with Jackson

鑒於Enum:

public enum CarStatus {
    NEW("Right off the lot"),
    USED("Has had several owners"),
    ANTIQUE("Over 25 years old");

    public String description;

    public CarStatus(String description) {
        this.description = description;
    }
}

我們如何設置它,以便傑克遜可以將此枚舉的實例序列化和反序列化為以下格式。

{
    "name": "NEW",
    "description": "Right off the lot"
}

默認是簡單地將枚舉序列化為字符串。 例如"NEW"

  1. 使用JsonFormat注釋使Jackson將枚舉作為JSON對象取消。
  2. 創建一個接受JsonNode的靜態構造JsonNode並使用JsonNode注釋所述構造@JsonCreator
  3. 為枚舉的名稱創建一個getter。

這是一個例子。

// 1
@JsonFormat(shape = JsonFormat.Shape.Object)
public enum CarStatus {
    NEW("Right off the lot"),
    USED("Has had several owners"),
    ANTIQUE("Over 25 years old");

    public String description;

    public CarStatus(String description) {
        this.description = description;
    }

    // 2
    @JsonCreator
    public static CarStatus fromNode(JsonNode node) {
        if (!node.has("name"))
            return null;

        String name = node.get("name").asText();

        return CarStatus.valueOf(name);
    }

    // 3
    @JsonProperty
    public String getName() {
        return name();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM