Panduan untuk @JsonFormat di Jackson

1. Ikhtisar

Pada artikel ini, kami mencoba memahami cara menggunakan @JsonFormat di Jackson. Ini adalah anotasi Jackson yang digunakan untuk menentukan cara memformat bidang dan / atau properti untuk keluaran JSON.

Secara khusus, anotasi ini memungkinkan Anda menentukan cara memformat nilai Tanggal dan Kalender sesuai dengan format SimpleDateFormat .

2. Ketergantungan Maven

@JsonFormat didefinisikan dalam paket jackson-databind jadi kita membutuhkan Dependensi Maven berikut:

 com.fasterxml.jackson.core jackson-databind 2.11.1 

3. Memulai

3.1. Menggunakan Format Default

Untuk memulai, kami akan mendemonstrasikan konsep penggunaan anotasi @JsonFormat dengan kelas yang mewakili pengguna.

Karena kami mencoba menjelaskan detail anotasi, objek User akan dibuat berdasarkan permintaan (dan tidak disimpan atau dimuat dari database) dan diserialkan ke JSON:

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

Membangun dan menjalankan contoh kode ini mengembalikan keluaran berikut:

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

Seperti yang Anda lihat, bidang createDate ditampilkan sebagai jumlah detik sejak epoch yang merupakan format default yang digunakan untuk bidang Tanggal .

3.2. Menggunakan Anotasi di Getter

Sekarang, mari kita gunakan @JsonFormat untuk menentukan format bidang createDate yang harus dibuat berseri. Berikut adalah kelas Pengguna yang diperbarui untuk perubahan ini. Bidang createDate telah dianotasi seperti yang ditunjukkan untuk menentukan format tanggal.

Format data yang digunakan untuk argumen pola ditentukan oleh SimpleDateFormat :

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

Dengan perubahan ini, kami membangun proyek lagi dan menjalankannya. Outputnya ditunjukkan di bawah ini:

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

Seperti yang Anda lihat, bidang createDate telah diformat menggunakan format SimpleDateFormat yang ditentukan menggunakan anotasi @JsonFormat .

Contoh di atas menunjukkan penggunaan anotasi di bidang. Ini juga dapat digunakan dalam metode pengambil (properti) sebagai berikut.

Misalnya, Anda mungkin memiliki properti yang dihitung berdasarkan pemanggilan. Anda dapat menggunakan anotasi pada metode pengambil dalam kasus seperti itu. Perhatikan bahwa polanya juga telah diubah untuk mengembalikan hanya bagian tanggal yang instan:

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

Output yang dihasilkan adalah sebagai berikut:

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

3.3. Menentukan Lokal

Selain menentukan format tanggal, Anda juga dapat menentukan lokal yang akan digunakan untuk serialisasi. Tidak menentukan parameter ini menyebabkan serialisasi dilakukan dengan lokal default:

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

3.4. Menentukan Bentuk

Menggunakan @JsonFormat dengan bentuk yang disetel ke JsonFormat.Shape.NUMBER menghasilkan keluaran default untuk tipe Tanggal - sebagai jumlah detik sejak periode . Pola parameter tidak berlaku untuk kasus ini dan diabaikan:

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

Outputnya seperti gambar di bawah ini:

{ ..., "dateNum":1482054723876 }

4. Kesimpulan

Kesimpulannya, @JsonFormat digunakan untuk mengontrol format keluaran dari tipe Tanggal dan Kalender seperti yang ditunjukkan di atas.

Kode contoh yang ditunjukkan di atas tersedia di GitHub.