====== 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** — позволяет задать порядок сериализации полей