2016-01-05 3 views
0

У меня есть следующие YAML конфигурацииКак отобразить конфигурацию YAML в POJOs с объектами классов

lookupKeys: - aggregate_location_city: outputKey: city_id - file1: source: ./pincode_to_city_mapping.csv primaryColumn: 0 secondaryColumn: 1 - file2: source: ./new_geo_city.csv primaryColumn: 1 secondaryColumn: 0

Соответствующий класс конфигурации

@Getter 
@Setter 
public class Configuration { 
    private ArrayList<LookupKey> lookupKeys; 

    @Getter 
    @Setter 
    public class LookupKey{ 
     private String outputKey; 
     private ArrayList<MappingFile> mappingFiles; 

     @Getter 
     @Setter 
     public class MappingFile{ 
      private String source; 
      private int primaryColumn; 
      private int secondaryColumn; 
     } 
    } 
} 

Как получить файл конфигурации сопоставлен класс конфигурации? Для этого я использую змей-ямль. Простой yaml.loadAs(in, Configuration.class) не работает.

ответ

0

Не используйте внутренние классы. LookupKey не должен определяться внутри Конфигурации.

+2

Хотя это действительно так, просто говоря «Do's & Don'ts» в этом контексте не собирается ничему учить кого-либо. Таким же образом, что ответы только для кода действительны, но не рекомендуются в большинстве контекстов. Пожалуйста, объясните * почему * нужно * «не использовать внутренние классы» *, и * почему * '* LookupKey' не должен быть определен внутри 'Configuration' * *. – XenoRo

+0

Внутренние классы требуют ссылки на внешний класс. SnakeYAML не сможет создать его. Просто используйте классы верхнего уровня. Я должен был упомянуть об этом в документации для SnakeYAML. – Andrey

0

Чтобы избежать необходимости maually код - тест - исправить свои собственные классы Mapping навсегда, вы можете иметь Java файлы, созданные для вас в два этапа:

Это дает вам классы Java, которые могут использоваться вместе с Jackson.