Kako obraditi YAML s Jacksonom

1. Uvod

U ovom kratkom vodiču naučit ćemo kako koristiti Jackson za čitanje i pisanje YAML datoteka.

Nakon što pregledamo našu strukturu primjera, upotrijebit ćemo ObjectMapper za čitanje YAML datoteke u Java objekt i također zapisivanje objekta u datoteku.

2. Ovisnosti

Dodajmo ovisnost za Jackson YAML format podataka:

 com.fasterxml.jackson.dataformat jackson-dataformat-yaml 2.11.1 

Uvijek možemo pronaći najnoviju verziju ove ovisnosti o Maven Central-u.

Naš objekt Java koristi a LocalDate, pa dodajmo i ovisnost za tip podataka JSR-310:

 com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.11.1 

Opet, njegovu najnoviju verziju možemo potražiti na Maven Central.

3. Struktura podataka i objekata

Budući da su naše ovisnosti na kvadrat, sada ćemo se obratiti našoj ulaznoj datoteci i Java klasama koje ćemo koristiti.

Pogledajmo prvo datoteku koju ćemo čitati:

narudžba br .: A001 datum: 2019-04-17 kupacName: kupac, narudžba JoeLine: - artikl: br. 9 Količina lančanika: 12 jedinicaCijena: 1,23 - stavka: Widget (10mm) količina: 4 jedinicaCijena: 3,45

Zatim, definirajmo Narudžba razred:

narudžba javne klase {private String orderNo; privatni datum LocalDate; privatni niz customerName; privatni popis orderLines; // Konstruktori, getteri, postavljači i toString}

Napokon, kreirajmo svoje Linija narudžbe razred:

javna klasa OrderLine {stavka privatnog niza; privatna int količina; privatna BigDecimalna jedinicaPrice; // Konstruktori, getteri, postavljači i toString}

4. Čitanje YAML-a

Koristit ćemo Jacksonovu ObjectMapper za čitanje naše YAML datoteke u Narudžba objekt, pa postavimo to sada:

mapper = novi ObjectMapper (novi YAMLFactory ());

Moramo koristiti findAndRegisterModules metoda tako da će se Jackson nositi s našom Datum pravilno:

mapper.findAndRegisterModules ();

Jednom kad imamo svoje ObjectMapper konfigurirano, mi jednostavno koristimo readValue:

Order order = mapper.readValue (nova datoteka ("src / main / resources / orderInput.yaml"), Order.class);

Pronaći ćemo to naše Narudžba objekt popunjava se iz datoteke, uključujući popis Linija narudžbe.

5. Pisanje YAML-a

Također ćemo koristiti ObjectMapper napisati Narudžba u datoteku. Ali prvo, dodamo joj neku konfiguraciju:

mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Dodavanjem tog retka Jacksonu govori samo napiši naš datum kao Niz umjesto pojedinih numeričkih dijelova.

Prema zadanim postavkama, naša će datoteka započeti s tri crtice. To savršeno vrijedi za YAML format, ali možemo ga isključiti onemogućavanjem značajke na YAMLTvornica:

mapper = novi ObjectMapper (novi YAMLFactory (). onemogućiti (Feature.WRITE_DOC_START_MARKER));

S tim dodatnim postavljenim na putu, stvorimo Narudžba:

Redovi popisa = novi ArrayList (); lines.add (novi OrderLine ("Bakrena žica (200 stopa)", 1, novi BigDecimal (50,67) .setScale (2, RoundingMode.HALF_UP))); lines.add (new OrderLine ("Podloške (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), "Kupac, Jane", retci);

Napišite svoju narudžbu koristeći writeValue:

mapper.writeValue (nova datoteka ("src / main / resources / orderOutput.yaml"), narudžba);

Kad pogledamo orderOutput.yaml, trebao bi izgledati slično:

broj narudžbe: "B-9910" datum: "2019-04-18" kupacNaziv: "Kupac, Jane" Redovi narudžbe: - artikl: "Bakrena žica (200 stopa)" količina: 1 jedinicaCijena: 50,67 - stavka: "Podloške (1/4 \ ")" količina: 24 jedinicaCijena: 0,15

6. Zaključak

U ovom smo brzom vodiču naučili kako čitati i pisati YAML u i iz datoteka pomoću Jackson biblioteke. Također smo pregledali nekoliko stavki konfiguracije koje će nam pomoći da naše podatke izgledamo onako kako želimo.

Cjelovit primjer koda je gotov na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found