Hvordan behandle YAML med Jackson

1. Introduksjon

I denne korte opplæringen skal vi lære hvordan du bruker Jackson til å lese og skrive YAML-filer.

Etter at vi har gått gjennom eksempelstrukturen, bruker vi ObjectMapper å lese en YAML-fil i et Java-objekt og også skrive et objekt ut til en fil.

2. Avhengigheter

La oss legge til avhengigheten av Jackson YAML-dataformat:

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

Vi kan alltid finne den nyeste versjonen av denne avhengigheten av Maven Central.

Java-objektet vårt bruker en LocalDate, så la oss også legge til en avhengighet for JSR-310 datatypen:

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

Igjen kan vi slå opp den nyeste versjonen på Maven Central.

3. Data- og objektstruktur

Med våre avhengigheter i kvadrat, vender vi oss nå til inndatafilen vår og Java-klassene vi skal bruke.

La oss først se på filen vi skal lese i:

bestillingsnr: A001 dato: 2019-04-17 kunde Navn: kunde, Joe bestilling Linjer: - vare: nr. 9 tannhjul antall: 12 enhet Pris: 1,23 - vare: widget (10 mm) antall: 4 enhet Pris: 3,45

La oss så definere Rekkefølge klasse:

public class Order {private String orderNo; privat LocalDate dato; private String kundenavn; private Liste ordrelinjer; // Konstruktører, Getters, Setters og toString}

Til slutt, la oss lage våre OrderLine klasse:

offentlig klasse OrderLine {privat strengvare; privat int mengde; privat BigDecimal unitPrice; // Konstruktører, Getters, Setters og toString}

4. Lesing av YAML

Vi skal bruke Jacksons ObjectMapper å lese YAML-filen vår i en Rekkefølge objekt, så la oss sette opp det nå:

mapper = ny ObjectMapper (ny YAMLFactory ());

Vi må bruke findAndRegisterModules metode slik at Jackson vil håndtere vår Dato ordentlig:

mapper.findAndRegisterModules ();

Når vi har fått vår ObjectMapper konfigurert, vi bare bruker readValue:

Bestillingsordre = mapper.readValue (ny fil ("src / main / resources / orderInput.yaml"), Order.class);

Vi finner det Rekkefølge objektet fylles ut fra filen, inkludert listen over OrderLine.

5. Skrive YAML

Vi skal også bruke ObjectMapper å skrive en Rekkefølge ut til en fil. Men først, la oss legge til noen konfigurasjoner i den:

mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

Å legge til den linjen ber Jackson om å bare skriv datoen vår som en String i stedet for individuelle numeriske deler.

Som standard starter filen vår med tre bindestreker. Det er helt gyldig for YAML-formatet, men vi kan slå den av ved å deaktivere funksjonenYAMLFabrikk:

mapper = ny ObjectMapper (ny YAMLFactory (). deaktiver (Feature.WRITE_DOC_START_MARKER));

Med det ekstra oppsettet ute av veien, la oss lage en Rekkefølge:

Listelinjer = ny 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), "Customer, Jane", linjer);

La oss skrive bestillingen vår ved hjelp av writeValue:

mapper.writeValue (ny fil ("src / main / resources / orderOutput.yaml"), rekkefølge);

Når vi ser på orderOutput.yaml, det skal se ut som:

ordrenr: "B-9910" dato: "2019-04-18" kundenavn: "Kunden, Jane" ordrelinjer: - vare: "Kobbertråd (200ft)" antall: 1 enhetPris: 50,67 - vare: "Skiver (1/4 \ ")" mengde: 24 enhetPris: 0,15

6. Konklusjon

I denne raske opplæringen lærte vi å lese og skrive YAML til og fra filer ved hjelp av Jackson-biblioteket. Vi så også på noen få konfigurasjonselementer som vil hjelpe oss med å få dataene våre til å se ut som vi ønsker.

Hele eksempelkoden er over på GitHub.