Зависимость:
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.13.0</version> </dependency> // это для работы с датой <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> </dependency>
Создаем класс для данных:
public class Order { private String orderNo; private LocalDate date; private String customerName; private List<OrderLine> orderLines; // Constructors, Getters, Setters and toString } // Можно еще вложенный добавить: public class OrderLine { private String item; private int quantity; private BigDecimal unitPrice; // Constructors, Getters, Setters and toString }
Чтение из файла:
mapper = new ObjectMapper(new YAMLFactory()); // для обработки даты mapper.findAndRegisterModules(); Order order = mapper.readValue(new File("src/main/resources/orderInput.yaml"), Order.class);
Запись в файл:
// это для работы с датой mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); mapper = new ObjectMapper(new YAMLFactory().disable(Feature.WRITE_DOC_START_MARKER)); // -== Создаем объект класса order, заполняем данными ==- // записываем в файл mapper.writeValue(new File("src/main/resources/orderOutput.yaml"), order);
пример yml:
orderNo: "B-9910" date: "2019-04-18" customerName: "Customer, Jane" orderLines: - item: "Copper Wire (200ft)" quantity: 1 unitPrice: 50.67 - item: "Washers (1/4\")" quantity: 24 unitPrice: 0.15
Простой пример, три поля, число и две строки
Пустой или отсутствующий файл - исключение либо NPE тоже может быть
Если ключ есть но без значения, инициализируется null
Если ключа нет, то похоже сработал конструктор
Похоже должен хотя бы один ключ присутствовать в файле, тогда проходит загрузка
Ну да, при отсутствии значений в файле, null либо конструктор кароче, числа нулем
При объявлении класса, можно использовать аннотации, для добавления функционала, например: