Panduan untuk @JsonFormat di Jackson

1. Gambaran keseluruhan

Dalam artikel ini, kami cuba memahami cara menggunakan @JsonFormat di Jackson. Ini adalah anotasi Jackson yang digunakan untuk menentukan cara memformat bidang dan / atau sifat untuk output JSON.

Secara khusus, anotasi ini membolehkan anda menentukan cara memformat nilai Tarikh dan Kalendar mengikut format SimpleDateFormat .

2. Ketergantungan Maven

@JsonFormat didefinisikan dalam pakej jackson-databaseind ​​jadi kami memerlukan Maven Dependency berikut:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Bermula

3.1. Menggunakan Format Lalai

Untuk memulakan, kami akan menunjukkan konsep penggunaan anotasi @JsonFormat dengan kelas yang mewakili pengguna.

Oleh kerana kami cuba menjelaskan perincian anotasi, objek Pengguna akan dibuat berdasarkan permintaan (dan tidak disimpan atau dimuat dari pangkalan data) dan diselaraskan ke JSON:

public class User { private String firstName; private String lastName; private Date createdDate = new Date(); // standard constructor, setters and getters } 

Membina dan menjalankan contoh kod ini mengembalikan output berikut:

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

Seperti yang anda lihat, bidang createDate ditunjukkan sebagai bilangan saat sejak zaman yang merupakan format lalai yang digunakan untuk bidang Date .

3.2. Menggunakan Anotasi pada Getter

Mari kita sekarang menggunakan @JsonFormat untuk menentukan format bahawa bidang createDate harus bersiri. Berikut adalah kelas Pengguna yang dikemas kini untuk perubahan ini. The CreatedDate bidang telah dijelaskan seperti yang ditunjukkan untuk menentukan format tarikh.

Format data yang digunakan untuk argumen corak ditentukan oleh SimpleDateFormat :

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ") private Date createdDate;

Dengan perubahan ini, kami membina semula projek dan menjalankannya. Hasilnya ditunjukkan di bawah:

{"firstName":"John","lastName":"Smith","createdDate":"[email protected]:53:34.740+0000"}

Seperti yang anda lihat, medan createDate telah diformat menggunakan format SimpleDateFormat yang ditentukan menggunakan anotasi @JsonFormat .

Contoh di atas menunjukkan penggunaan anotasi di lapangan. Ia juga dapat digunakan dalam metode mendapatkan (harta tanah) seperti berikut.

Sebagai contoh, anda mungkin mempunyai harta yang dikira semasa memohon. Anda boleh menggunakan anotasi pada kaedah mendapatkan dalam kes seperti itu. Perhatikan bahawa corak juga telah diubah untuk mengembalikan bahagian tarikh sahaja:

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

Hasil yang dihasilkan adalah seperti berikut:

{ ... , "currentDate":"2016-12-18", ...}

3.3. Menentukan Lokasi

Selain menentukan format tarikh, Anda juga dapat menentukan lokasi yang akan digunakan untuk serialisasi. Tidak menentukan parameter ini mengakibatkan serialisasi dilakukan dengan lokasi lalai:

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

3.4. Menentukan Bentuknya

Menggunakan @JsonFormat dengan bentuk yang ditetapkan ke JsonFormat.Shape.NUMBER menghasilkan output lalai untuk jenis Tarikh - sebagai bilangan detik sejak zaman itu . Corak parameter tidak berlaku untuk kes ini dan diabaikan:

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

Keluarannya seperti di bawah:

{ ..., "dateNum":1482054723876 }

4. Kesimpulan

Kesimpulannya, @JsonFormat digunakan untuk mengawal format output jenis Tarikh dan Kalendar seperti yang ditunjukkan di atas.

Contoh kod yang ditunjukkan di atas boleh didapati di GitHub.