【问题标题】:Current datetime in yaml by SnakeYamlSnakeYaml 在 yaml 中的当前日期时间
【发布时间】:2021-02-03 11:05:46
【问题描述】:

问题是,如何在 yaml 资源文件中指定当前日期时间,以使 SnakeYaml 的 yaml.loadAs 成为可能?

Yaml 文件example.yaml:

additionalFields:
    eventtype: userchange
    listname: default
    timestamp: !!timestamp now

加载中:

    try( InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("example.yaml")) {
        Yaml yaml = new Yaml();
        topSettings = yaml.loadAs( in, Example.class );
    }

additionalFieldsExample.java 中的定义:

private Map<String, Object> additionalFields = new HashMap<String, Object>();

【问题讨论】:

    标签: java yaml snakeyaml


    【解决方案1】:

    您需要为!!timestamp 标记自定义构造函数:

    class TsConstructor extends Constructor {
        public TsConstructor() {
            this.yamlConstructors.put(new Tag("yaml.org,2002:timestamp"),
                    new ConstructTimestamp());
        }
    
        private class ConstructTimestamp extends AbstractConstruct {
            public Object construct(Node node) {
                String val = (String) constructScalar(node);
                if ("now".equals(val)) {
                    return Instant.now();
                } else {
                    return Instant.parse(val);
                }
            }
        }
    }
    

    然后,在加载时使用它:

    Yaml yaml = new Yaml(new TsConstructor());
    topSettings = yaml.loadAs( in, Example.class );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 2017-06-20
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2012-12-21
      相关资源
      最近更新 更多