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.