java - YAML 自定义对象

标签 java yaml snakeyaml

我有简单的 YAML 文档:

object:
  a: 1
  b: 2
  c: 3

我可以将此属性读取到自定义对象吗,该对象包含仅带有 1 个参数的构造函数。例如

public class CustomObject {
        private String value;

        public CustomObject(String value) {
            ....
        }

        getValue ...
        setValue ...
    }

其中 value 是属性 a、b、c 与掩码串联的结果(结果为 1:2/3)?

最佳答案

这可以通过自定义构造函数和表示器实现:

class CustomObjectConstructor extends Constructor {
    public CustomObjectConstructor() {
        this.yamlConstructors.put(new Tag("!customObject"), new ConstructCustomObject());
    }

    private class ConstructCustomObject extends AbstractConstruct {
        public Object construct(Node node) {
            final Map<Object, Object> values = constructMapping(node);
            final String a = (String) values.get("a");
            final String b = (String) values.get("b");
            final String c = (String) values.get("c");
            return new CustomObject(a + ":" + b + "/" + c);
        }
    }
}

你可以像这样使用它:

Yaml yaml = new Yaml(new CustomObjectConstructor());
CustomObject myObject =
    (CustomObject) yaml.load("!customObject\na: 1\nb: 2\nc: 3");

当然,这需要针对处理错误情况进行细化,但它显示了总体思路。要将对象转储为映射,您可以定义一个类似于此处代码的表示者。请参阅documentation了解更多信息。

关于java - YAML 自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41101863/

相关文章:

java - 使用字节码生成的框架是否会造成抽象漏洞?

java - 由于在 REST 中使用 HATEOAS 而导致循环依赖

azure - GitHub PR 合并不会触发 Azure DevOps Pipeline

java - 如何在Java中使用snake yaml序列化具有自定义名称的字段

java - SnakeYaml 从字符串第一行转储

java - 使用 SnakeYAML 编写 YAML 文件

java - Java 中的 OutputStream 是阻塞的吗? ( socket )

java - 用于验证的 REST API 中的媒体类型

c++ - 被 YAML::NodeType::Undefined 与 yaml-cpp 混淆

spring-boot - Spring-Boot 配置 : How to keep whitespace in yaml key being used to populate Map<String, 字符串>