我想用SnakeYAML(或其他解析器)解析Docker-compose.yml。我遇到的问题是属性可以是String或更复杂的对象,例如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 Beans来对不同的元素进行建模,并将配置模型建模为List<String>,但这显然仅适用于短语法。

最佳答案

如果SnakeYaml在希望对对象进行反序列化的地方遇到了String,它将寻找带有String参数的构造函数。

因此,在示例中,为config的长语法定义一个JavaBean,然后向以短语法作为参数的构造函数添加一个构造函数就足够了。

关于java - SnakeYAML多态性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54886815/

10-11 22:11