php-Editor-Erdbeer-Antworten: Ja, es gibt eine Möglichkeit, Java-Enumerationen und YAML zu serialisieren und zu deserialisieren. Java-Aufzählungen können mithilfe von Jackson-, Gson- oder anderen JSON-Bibliotheken serialisiert und deserialisiert werden. YAML ist ein benutzerfreundliches Datenformat, das auch zum Serialisieren und Deserialisieren von Java-Enums über Jackson, SnakeYAML oder andere YAML-Bibliotheken verwendet werden kann. Mithilfe dieser Bibliotheken können Sie Java-Aufzählungen zur Datenübertragung und -speicherung problemlos in YAML konvertieren.
Ich versuche, ein Java-Objekt, das eine Aufzählung enthält, in/von einer YAML-Darstellung zu serialisieren und zu deserialisieren. Ich versuche, dazu das Jackson-Paket (com.fasterxml.jackson
) zu verwenden.
Ich bekomme immer wieder diese Ausnahme:
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]
Ich gehe davon aus, dass ich einen Adapter oder Konverter benötige, weiß aber nicht, was für YAML verfügbar ist (falls vorhanden).
Zur Referenz:
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 }
data.yaml:
--- name: gitlab_pipeline_success_total description: "blah blah blah" type: counter labels: - project - somethingElse data:
parser.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); } }
Standardmäßig verwendet Jackson die valueOf
-Methode der Aufzählung. Groß- und Kleinschreibung beachten.
Sie können dies leicht ändern, indem Sie eine statische Methode hinzufügen, die mit @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 }
Das obige ist der detaillierte Inhalt vonGibt es eine Möglichkeit, Java-Enums mit YAML (de)serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!