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.