【问题标题】:SnakeYAML polymorphySnakeYAML 多态性
【发布时间】:2019-02-26 13:39:27
【问题描述】:

我想用 SnakeYAML(或其他解析器)解析 Docker-compose.yml。我遇到的问题是属性可以是字符串或更复杂的对象,例如configs,它支持“短”语法和“长”语法:

短

version: "3.3"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

长

version: "3.3"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - source: my_config
        target: /redis_config
        uid: '103'
        gid: '103'
        mode: 0440
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

如何将其映射到 SnakeYAML?目前我已经创建了 Java Bean 来对不同的元素进行建模,并将配置建模为 List<String>,但这显然只适用于短语法。

【问题讨论】:

  • 我认为您需要自己自定义它,因为snakeyml(或jackson,或其他)对语义和含义一无所知。您可以尝试为services->redis->configs 指定自定义反序列化器,但问题是configs 会(?)在services 之后被解析

标签: java polymorphism snakeyaml


【解决方案1】:

如果 SnakeYaml 在期望反序列化对象的地方遇到字符串,它会查找带有字符串参数的构造函数。

所以在这个例子中,为config的长语法定义一个JavaBean就足够了,然后给它添加一个构造函数,以短语法作为参数。

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 1970-01-01
    • 2019-03-08
    • 2016-06-01
    • 2016-03-19
    • 2018-07-01
    • 2023-04-10
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多