Как преобразовать файл 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
...
Другие вопросы по тегам