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 funksjonen på YAMLFabrikk:
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.