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ý.