目录
问题内容
解决方法
首页 Java 有没有办法将 Java 枚举与 YAML 进行(反)序列化?

有没有办法将 Java 枚举与 YAML 进行(反)序列化?

Feb 08, 2024 pm 10:15 PM

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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)