php小編草莓回答:是的,有辦法將 Java 枚舉與 YAML 進行序列化與反序列化。 Java 枚舉可以透過使用 Jackson、Gson 或其他 JSON 函式庫來實現序列化和反序列化。 YAML 是一種人類友善的資料格式,也可以透過 Jackson、SnakeYAML 或其他 YAML 函式庫來實現與 Java 枚舉的序列化和反序列化。使用這些函式庫,可以輕鬆地將 Java 枚舉與 YAML 進行轉換,實現資料的傳輸和儲存。
我正在嘗試序列化和反序列化一個包含枚舉到/來自 YAML 表示的 Java 物件。我正在嘗試使用 Jackson (com.fasterxml.jackson
) 套件來執行此操作。
我不斷收到此異常:
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.beastcode.devops.prometheusbroker.domain.Metric$Type` from String "counter": not one of the values accepted for Enum class: [GAUGE, COUNTER]
我假設我需要某種適配器或轉換器,但不知道 YAML 有什麼可用(如果有的話)。
供參考:
Metric.java:
public class Metric { public enum Type { COUNTER, GAUGE } private String name; private String description; private Type type; private List<String> labels; private List<MetricData> data; // getters/setters removed }
數據.yaml:
--- name: gitlab_pipeline_success_total description: "blah blah blah" type: counter labels: - project - somethingElse data:
解析器.java:
public class Parser { private ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); public void parse() throws StreamReadException, DatabindException, IOException { Metric m = mapper.readValue(new File("data.yaml"), Metric.class); } }
預設情況下,Jackson 使用枚舉的 valueOf
方法。區分大小寫。
您可以透過新增以 @JsonCreator
註解的靜態方法來輕鬆變更此設定:
public class Metric { public enum Type { COUNTER, GAUGE; @JsonCreator public static Type getType(String value) { return valueOf(value.toUpperCase()); } // optional, for serialization @JsonValue public String value() { return name().toLowerCase(); } } // rest omitted }
以上是有沒有辦法將 Java 枚舉與 YAML 進行(反)序列化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!