====== Connections ====== ===== Работа с yaml ===== [[https://www.baeldung.com/jackson-yaml|Дока1]]\\ [[https://javarush.com/quests/lectures/jru.module2.lecture31|Дока2]]\\
:!: Пример Зависимость: com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.13.0 // это для работы с датой com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.13.0 Создаем класс для данных: public class Order { private String orderNo; private LocalDate date; private String customerName; private List 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 либо конструктор кароче, числа нулем\\
:!: Аннотации При объявлении класса, можно использовать аннотации, для добавления функционала, например:\\ * **@JsonIgnore** — ставится над элементом, который нужно игнорировать при сериализации/десериализации * **@JsonFormat** — позволяет задать формат сериализованных данных (удобно с датой например) * **@JsonProperty** — позволяет изменить имя свойства, в которое будет сериализировано поле * **@JsonInclude** — с помощью этой аннотации можно указать, в каком случае поле должно сериализироваться * **@JsonPropertyOrder** — позволяет задать порядок сериализации полей