Memformat Tarikh JSON di Spring Boot

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara memformat bidang tarikh JSON dalam aplikasi Spring Boot.

Kami akan meneroka pelbagai cara memformat tarikh menggunakan Jackson , yang digunakan oleh Spring Boot sebagai pemproses JSON lalai.

2. Menggunakan @JsonFormat pada Medan Tarikh

2.1. Menetapkan Format

Kami boleh menggunakan anotasi @JsonFormat untuk memformat bidang tertentu :

public class Contact { // other fields @JsonFormat(pattern="yyyy-MM-dd") private LocalDate birthday; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime lastUpdate; // standard getters and setters }

Di medan ulang tahun , kami menggunakan corak yang hanya memberikan tarikh manakala di medan Pembaharuan terakhir kami juga menyertakan waktu.

Kami menggunakan jenis tarikh Java 8 yang cukup berguna untuk menangani jenis temporal. Sudah tentu, jika kita perlu menggunakan jenis warisan seperti java.util.Date, kita boleh menggunakan anotasi dengan cara yang sama:

public class ContactWithJavaUtilDate { // other fields @JsonFormat(pattern="yyyy-MM-dd") private Date birthday; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date lastUpdate; // standard getters and setters }

Akhirnya, mari kita lihat output yang diberikan dengan menggunakan @JsonFormat dengan format tarikh yang diberikan:

{ "birthday": "2019-02-03", "lastUpdate": "2019-02-03 10:08:02" }

Seperti yang kita lihat, menggunakan anotasi @JsonFormat adalah cara terbaik untuk memformat bidang tarikh tertentu.

Namun, kita hanya harus menggunakannya ketika kita memerlukan pemformatan khusus untuk bidang. Sekiranya kita ingin mempunyai format umum untuk semua tarikh dalam aplikasi kita, ada cara yang lebih baik untuk mencapainya, seperti yang akan kita lihat kemudian.

2.2. Menetapkan Zon Waktu

Juga, jika kita perlu menggunakan zon waktu tertentu, kita dapat menetapkan atribut zon waktu @ JsonFormat:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="Europe/Zagreb") private LocalDateTime lastUpdate;

Kami tidak perlu menggunakannya jika jenis sudah mengandung zon waktu, misalnya dengan java.time.ZonedDatetime.

3. Mengkonfigurasi Format Lalai

Walaupun @JsonFormat berkuasa sendiri, format data yang keras dan zon waktu dapat menggigit kita.

Sekiranya kita ingin mengkonfigurasi format lalai untuk semua tarikh dalam aplikasi kita, cara yang lebih fleksibel adalah mengkonfigurasinya dalam aplikasi .

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

Dan jika kami ingin menggunakan zon waktu tertentu pada tarikh JSON kami, ada juga harta tanah untuk itu:

spring.jackson.time-zone=Europe/Zagreb

Walaupun menetapkan format lalai seperti ini cukup berguna dan mudah, ada kelemahan pendekatan ini. Malangnya, ia tidak berfungsi dengan jenis tarikh Java 8 , seperti LocalDate dan LocalDateTime - kita boleh menggunakannya hanya untuk memformat bidang jenis java.util.Date atau java.util.Calendar . Terdapat harapan, seperti yang akan kita lihat tidak lama lagi.

4. Menyesuaikan ObjectMapper Jackson

Jadi, jika kita mahu menggunakan Java 8 jenis tarikh dan menetapkan format tarikh lalai, maka kita perlu melihat mewujudkan Jackson2ObjectMapperBuilderCustomizer kacang:

@Configuration public class ContactAppConfig { private static final String dateFormat = "yyyy-MM-dd"; private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { builder.simpleDateFormat(dateTimeFormat); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat))); }; } }

Contoh di atas menunjukkan cara mengkonfigurasi format lalai dalam aplikasi kita. Kita harus menentukan kacang dan mengganti kaedah penyesuaiannya untuk menetapkan format yang diinginkan.

Walaupun pendekatan ini mungkin kelihatan agak membebankan, perkara yang baik adalah ia berfungsi untuk jenis Java 8 dan jenis tarikh lama.

5. Kesimpulan

Dalam artikel ini, kami meneroka beberapa cara untuk memformat tarikh JSON dalam aplikasi Spring Boot.

Seperti biasa, kita dapat mencari kod sumber untuk contoh di GitHub.