Heim > Java > Gibt es eine Möglichkeit, Java-Enums mit YAML (de)serialisieren?

Gibt es eine Möglichkeit, Java-Enums mit YAML (de)serialisieren?

WBOY
Freigeben: 2024-02-08 22:15:18
nach vorne
975 Leute haben es durchsucht

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.

Frageninhalt

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]
Nach dem Login kopieren

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
}
Nach dem Login kopieren

data.yaml:

---
name: gitlab_pipeline_success_total
description: "blah blah blah"
type: counter
labels:
  - project
  - somethingElse
data:
Nach dem Login kopieren

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);
  }

}
Nach dem Login kopieren

Workaround

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:

versehen ist
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
}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage