Ako spracovať YAML s Jacksonom
1. Úvod
V tomto krátkom tutoriáli sa naučíme, ako používať Jackson na čítanie a zápis súborov YAML.
Keď prejdeme našu vzorovú štruktúru, použijeme ObjectMapper načítať súbor YAML do objektu Java a tiež zapísať objekt do súboru.
2. Závislosti
Pridajme závislosť pre dátový formát Jackson YAML:
com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.11.1
Najnovšiu verziu tejto závislosti vždy nájdeme na serveri Maven Central.
Náš objekt Java používa a LocalDate, tak pridajme závislosť aj pre dátový typ JSR-310:
com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.11.1
Jeho najnovšiu verziu môžeme opäť vyhľadať na serveri Maven Central.
3. Dáta a štruktúra objektov
Keď sú naše závislosti na druhú, teraz sa obrátime na náš vstupný súbor a triedy Java, ktoré budeme používať.
Najprv sa pozrime na súbor, v ktorom budeme čítať:
číslo objednávky: A001 dátum: 2019-04-17 customerName: zákazník, Joe orderLines: - položka: No. 9 Ozubené kolesá množstvo: 12 jednotiek Cena: 1,23 - položka: Widget (10mm) množstvo: 4 jednotky Cena: 3,45
Potom definujme objednať trieda:
public class Order {private String orderNo; súkromné LocalDate dátum; private String customerName; súkromné zoznamové riadky; // Konštruktory, getre, setre a toString}
Nakoniec si vytvorme našu OrderLine trieda:
public class OrderLine {private String item; súkromné množstvo; súkromná BigDecimal unitPrice; // Konštruktory, getre, setre a toString}
4. Čítanie YAML
Použijeme Jacksona ObjectMapper prečítať náš súbor YAML do objednať objekt, tak to nastavme teraz:
mapovač = nový ObjectMapper (nový YAMLFactory ());
Musíme použiť findAndRegisterModules metóda, aby Jackson zvládol našu Dátum správne:
mapper.findAndRegisterModules ();
Keď už máme svoje ObjectMapper nakonfigurovaný, jednoducho používame readValue:
Order order = mapper.readValue (nový súbor ("src / main / resources / orderInput.yaml"), Order.class);
Zistíme, že náš objednať objekt je vyplnený zo súboru vrátane zoznamu OrderLine.
5. Písanie YAML
Budeme tiež používať ObjectMapper napísať an objednať do súboru. Najprv však k tomu pridajme konfiguráciu:
mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Pridanie tohto riadku povie Jacksonovi stačí napísať náš dátum ako String namiesto jednotlivých číselných častí.
V predvolenom nastavení bude náš súbor začínať tromi pomlčkami. To je úplne platné pre formát YAML, ale môžeme ju vypnúť vypnutím funkcie na YAMLFactory:
mapovač = nový ObjectMapper (nový YAMLFactory (). vypnúť (Feature.WRITE_DOC_START_MARKER));
S týmto dodatočným nastavením z cesty vytvorme objednať:
Zoznam riadkov = new ArrayList (); lines.add (new OrderLine ("Copper Wire (200ft)", 1, new BigDecimal (50.67) .setScale (2, RoundingMode.HALF_UP))); lines.add (new OrderLine ("Washers (1/4 \") ", 24, new BigDecimal (.15) .setScale (2, RoundingMode.HALF_UP))); Order order = new Order (" B-9910 ", LocalDate.parse ("2019-04-18", DateTimeFormatter.ISO_DATE), "Zákazník, Jane", riadky);
Napíšme našu objednávku pomocou writeValue:
mapper.writeValue (nový súbor ("src / main / resources / orderOutput.yaml"), poradie);
Keď sa pozrieme do orderOutput.yaml, malo by to vyzerať podobne ako:
číslo objednávky: „B-9910“ dátum: „2019-04-18“ customerName: „Customer, Jane“ orderLines: - položka: „Medený drôt (200 stôp)“ množstvo: 1 jednotka Cena: 50,67 - položka: „Podložky (1/4 \ ")" množstvo: 24 jednotiek Cena: 0,15
6. Záver
V tomto rýchlom výučbe sme sa naučili, ako čítať a písať YAML do a zo súborov pomocou Jacksonovej knižnice. Pozreli sme sa tiež na niekoľko konfiguračných položiek, ktoré nám pomôžu získať naše údaje tak, ako chceme.
Celý ukážkový kód je na GitHube ukončený.