Hogyan dolgozzuk fel a YAML-t Jacksonnal

1. Bemutatkozás

Ebben a rövid bemutatóban megtanuljuk, hogyan kell Jacksont használni YAML fájlok olvasásához és írásához.

Miután áttekintettük a példaszerkezetünket, használjuk a ObjectMapper hogy YAML fájlt olvasson egy Java objektummá, és írjon ki egy objektumot is egy fájlba.

2. Függőségek

Adjuk hozzá a Jackson YAML adatformátum függőségét:

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

Mindig megtalálhatjuk ennek a függőségnek a legújabb verzióját a Maven Central-tól.

Java objektumunk a LocalDate, ezért adjunk hozzá egy függőséget a JSR-310 adattípushoz is:

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

Ismét megkereshetjük legújabb verzióját a Maven Central-on.

3. Adatok és az objektum felépítése

Ha a függőségeink négyzetre vannak tüntetve, most rátérünk a bemeneti fájlunkra és az általunk használt Java osztályokra.

Először nézzük meg a fájlt, amelyben olvasni fogunk:

Rendelési szám: A001 dátum: 2019-04-17 ügyfélNév: Ügyfél, Joe orderLines: - cikk: No. 9 Lánckerék mennyiség: 12 egység Ár: 1,23 - cikk: Widget (10 mm) mennyiség: 4 egység Ár: 3,45

Ezután definiáljuk a Rendelés osztály:

public class Rendelés {private String orderNo; privát LocalDate dátum; privát String ügyfélNév; private List orderLines; // Konstruktorok, Getters, Setters és toString}

Végül hozzuk létre a sajátunkat OrderLine osztály:

public class OrderLine {private String item; privát int mennyiség; privát BigDecimal unitPrice; // Konstruktorok, Getters, Setters és toString}

4. A YAML olvasása

A Jacksonét fogjuk használni ObjectMapper hogy YAML fájlunkat olvashassuk egy Rendelés objektum, tehát állítsuk be ezt most:

mapper = new ObjectMapper (új YAMLFactory ());

Használnunk kell a findAndRegisterModules módszerrel, hogy Jackson kezelje a mi dolgunkat Dátum megfelelően:

mapper.findAndRegisterModules ();

Ha megvan a miénk ObjectMapper konfigurálva, egyszerűen használjuk readValue:

Rendelési sorrend = mapper.readValue (új fájl ("src / main / resources / orderInput.yaml"), Order.class);

Megtaláljuk, hogy a miénk Rendelés objektum kerül feltöltésre a fájlból, beleértve a OrderLine.

5. YAML írása

Mi is használni fogjuk ObjectMapper hogy írjak egy Rendelés ki egy aktába. De először tegyünk hozzá néhány konfigurációt:

mapper.disable (SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

E sor hozzáadása azt mondja Jacksonnak csak írja a dátumunkat a-nak Húr az egyes numerikus részek helyett.

Alapértelmezés szerint a fájlunk három kötőjellel kezdődik. Ez tökéletesen érvényes a YAML formátumra, de a funkció letiltásával kikapcsolhatjuk a YAMLFactory:

mapper = new ObjectMapper (new YAMLFactory (). disable (Feature.WRITE_DOC_START_MARKER));

Ha ezt a további beállítást nem sikerül, hozzunk létre egy Rendelés:

Sorok felsorolása = new ArrayList (); lines.add (új OrderLine ("Rézhuzal (200 láb)", 1, új BigDecimal (50,67) .setScale (2, RoundingMode.HALF_UP)); lines.add (new OrderLine ("Alátétek (1/4 \") ", 24, új BigDecimal (.15) .setScale (2, RoundingMode.HALF_UP))); Rendelési sorrend = new Order (" B-9910 ", LocalDate.parse ("2019-04-18", DateTimeFormatter.ISO_DATE), "Ügyfél, Jane", sorok);

Írjuk meg megrendelésünket a segítségével writeValue:

mapper.writeValue (új fájl ("src / main / resources / orderOutput.yaml"), sorrend);

Amikor belenézünk a orderOutput.yaml, hasonlóan kell kinéznie:

orderNo: "B-9910" dátum: "2019-04-18" customerName: "Customer, Jane" orderLines: - cikk: "Copper Wire (200ft)" mennyiség: 1 egység Ár: 50.67 - cikk: "Alátétek (1/4 \ ")" mennyiség: 24 egységár: 0,15

6. Következtetés

Ebben a gyors bemutatóban megtanultuk, hogyan kell YAML-t írni és írni fájlokba és fájlokból a Jackson könyvtár segítségével. Megnéztünk néhány konfigurációs elemet, amelyek segítenek abban, hogy az adataink a kívánt módon nézzenek ki.

A teljes példakódnak vége a GitHubon.