Чтение целочисленного списка из файла yaml - PullRequest
0 голосов
/ 08 марта 2019

Текущая реализация: -

public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));

Однако я не доволен этим подходом, так как он жестко закодирован. Я хочу сделать его настраиваемым, а не жестко запрограммированным. Я полагаю, что чтение этих значений из файла yaml решит мою проблему.

Но как мне определить список Integer в файле yaml и реализовать его с помощью @value. Я могу найти много примеров о чтении списка строк, но не целых чисел.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Вы можете использовать следующий метод для получения всех доступных свойств из файла YML. Когда вы использовали следующий метод, вы должны добавить следующий jar в ваш скрипт сборки.

compile group: 'org.yaml', name: 'snakeyaml', version: '1.12'   

Думаю, это поможет вам продолжить работу.

private Map<String, Object> loadYMLData() {
        Map<String, Object> result = new HashMap<String, Object>();
        try {
            String fileName = "{{YAMAL FILE NAME}}.yml";
            Yaml yaml = new Yaml();
            ClassLoader classLoader = getClass().getClassLoader();
            File file = new File(classLoader.getResource(fileName).getFile());
            InputStream ios = new FileInputStream(file);

            // Parse the YAML file and return the output as a series of Maps and Lists
            result = (Map<String, Object>) yaml.load(ios);
            System.out.println(result.toString());

        } catch (Exception e) {
            logger.error("Error==>", e);
        }
        return result;
    }
0 голосов
/ 08 марта 2019

В одну сторону:

Допустим, если файл свойств содержит

intArr={1,2,3}

Тогда @Value можно использовать как:

@Value("#{${intArr}}")
Integer[] intArr;

Второй способ:

Если свойство содержит значения, разделенные запятыми, как: intArr: [1, 2, 3]

Тогда код аннотации будет:

@Value("${intArr}")
private int[] intArr;

Редактировать:

Вы можете настроить ConversionServiceFactoryBean, который активирует новую службу конфигурации, которая поддерживает преобразование типов String в Collection.

Активируя это, он будет поддерживать следующие виды преобразования:

 intArray= 1, 2, 3, 4

и следующий код:

@Value("${intArray}")
private List<Integer> myList;

Ref здесь

...