SnakeYAML多态
SnakeYAML polymorphy
我想用 SnakeYAML(或其他解析器)解析 Docker-compose.yml。我 运行 遇到的问题是属性可以是字符串或更复杂的对象,例如 configs,它支持 "short" 语法和 "long" 语法:
短
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 在期望反序列化对象的位置遇到字符串,它会查找带有字符串参数的构造函数。
所以在这个例子中,对于长语法的config定义一个JavaBean就可以了,然后在以短语法为参数的基础上添加一个构造函数。
我想用 SnakeYAML(或其他解析器)解析 Docker-compose.yml。我 运行 遇到的问题是属性可以是字符串或更复杂的对象,例如 configs,它支持 "short" 语法和 "long" 语法:
短
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 在期望反序列化对象的位置遇到字符串,它会查找带有字符串参数的构造函数。
所以在这个例子中,对于长语法的config定义一个JavaBean就可以了,然后在以短语法为参数的基础上添加一个构造函数。