Как преобразовать файл yaml в список со сложным универсальным объектом
Мой ямл вот так:
- code: code1
type: REST
base-url: https://api.test1.com/api/v1
endPoints:
- type: BATCH
path: /transmissions
method: POST
content-type: application/json
headers: [{key: Authorization, expression: '#root.apiKey'}]
dependencies: []
params:
- key: campaign_id
source: campaign_id
- key: subject
source: subject
- code: code2
type: SAAS
base-url: https://api.test2.com/api/v1
endPoints:
- type: ONE
path: /transmissions2
method: GET
content-type: application/json
headers: [{key: Authorization, expression: '#root.apiKey'}]
dependencies: []
params:
- key: campaign_id
source: campaign_id
- key: subject
source: subject
#
...
универсальный класс Java:
@Data
public class MappingField {
private String code;
private ServiceType type;
@JsonProperty("base-url")
private String baseUrl;
private int port;
private List<EndPoint> endPoints;
private Map<String, EndPoint> endPointMapByType = new HashMap<>();
@Data
public static class EndPoint {
private EndpointType type;
private String path;
@JsonProperty("content-type")
private String contentType;
private HttpMethod method;
@JsonProperty("substitution_data")
private List<String> substitutionData;
private List<Map<String,Object>> headers;
private List<Map<String,Object>> params;
private Map<String,Object> response;
}
}
я использую snakeYaml, чтобы решить этот документ, например так: см. https://bitbucket.org/asomov/snakeyaml/wiki/Documentation
@Test
public void test4(){
Constructor constructor = new Constructor(List.class);//Car.class is root
TypeDescription carDescription = new TypeDescription(List.class);
// carDescription.putListPropertyType("null",MappingField.class);
constructor.addTypeDescription(carDescription);
Yaml yaml = new Yaml(constructor);
final Object load =
yaml.load(this.getClass().getClassLoader().getResourceAsStream("test1.yml"));
assertNotNull("load");
}
когда он запускается, он возвращает List<Object>
что я сделаю что-нибудь, чтобы это вернулось List<MappingField>
? Как добавить Java-дженерики "MappingFields" в список коллекции?
примечание: мой корень yaml - это список
0 ответов
final List<MappingFields> load =
(List<MappingFields>) yaml.load(this.getClass().getClassLoader().getResourceAsStream("test1.yml"));
будет работать, если вы добавите дополнительный тег в YAML
- !!your.package.MappingFields
code: code1
...