Vodič za @JsonFormat u Jacksonu

1. Pregled

U ovom članku pokušavamo razumjeti kako se koristi @JsonFormat u Jacksonu. To je Jacksonova bilješka koja se koristi za određivanje načina formatiranja polja i / ili svojstava za JSON izlaz.

Konkretno, ova napomena vam omogućuje da odredite kako formatirati Datum i Kalendar vrijednosti prema a SimpleDateFormat format.

2. Ovisnost Mavena

@JsonFormat definiran je u paketu jackson-databind, pa nam je potrebna sljedeća ovisnost Mavena:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Početak rada

3.1. Korištenje zadanog formata

Za početak ćemo pokazati koncepte korištenja @JsonFormat napomena s klasom koja predstavlja korisnika.

Budući da pokušavamo objasniti detalje napomene, Korisnik objekt će se stvoriti na zahtjev (i neće se pohraniti ili učitati iz baze podataka) i serializirati u JSON:

korisnik javne klase {private String firstName; private String lastName; privatni Datum kreiranDatum = novi datum (); // standardni konstruktor, postavljači i dobivači} 

Izgradnja i izvođenje ovog primjera koda vraća sljedeći izlaz:

{"firstName": "John", "lastName": "Smith", "createdDate": 1482047026009}

Kao što vidite, createdDate polje prikazano je kao broj sekundi od epohe koja je zadani format koji se koristi za Datum polja.

3.2. Korištenje napomene na geteru

Krenimo sada @JsonFormat da odredite format koji createdDate polje treba serializirati. Evo korisničke klase ažurirane za ovu promjenu. The createdDate polje označeno je kako je prikazano kako bi se odredio format datuma.

Format podataka koji se koristi za uzorak argument je naveden sa SimpleDateFormat:

@JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "[e-pošta zaštićena]: mm: ss.SSSZ") privatni Datum kreiranjaDatum;

S ovom promjenom na mjestu, ponovno gradimo projekt i pokrećemo ga. Izlaz je prikazan u nastavku:

{"firstName": "John", "lastName": "Smith", "createdDate": "[e-mail zaštićen]: 53: 34.740 + 0000"}

Kao što vidite, createdDate polje formatirano je pomoću navedenog SimpleDateFormat formatu pomoću @JsonFormat bilješka.

Gornji primjer pokazuje upotrebu bilješke na polju. Također se može koristiti u getterskoj metodi (svojstvu) kako slijedi.

Na primjer, možda imate svojstvo koje se izračunava na poziv. U tom slučaju možete upotrijebiti bilješku na metodi getera. Imajte na umu da je uzorak također promijenjen tako da daje samo datumski dio trenutka:

@JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") javni datum getCurrentDate () {return new Date (); }

Rezultat je sljedeći:

{..., "currentDate": "18.12.2016.", ...}

3.3. Određivanje lokaliteta

Uz specificiranje formata datuma, možete odrediti i lokalitet koji će se koristiti za serializaciju. Nenavođenje ovog parametra rezultira serizalizacijom koja se izvodi sa zadanom lokalizacijom:

@JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "[email protected]: mm: ss.SSSZ", locale = "en_GB") javni datum getCurrentDate () {return new Date (); }

3.4. Određivanje oblika

Koristeći @JsonFormat s oblik postavljen JsonFormat.Shape.BROJ rezultira zadanim izlazom za Datum vrste - kao broj sekundi od epohe. Parametar uzorak nije primjenjiv na ovaj slučaj i zanemaruje se:

@JsonFormat (shape = JsonFormat.Shape.NUMBER) javni datum getDateNum () {return new Date (); }

Izlaz je prikazan dolje:

{..., "dateNum": 1482054723876}

4. Zaključak

U zaključku, @JsonFormat koristi se za kontrolu izlaznog formata Datum i Kalendar vrste kao što je gore pokazano.

Primjer koda prikazan gore dostupan je na GitHubu.