Memformat Tanggal JSON di Spring Boot

1. Ikhtisar

Dalam tutorial ini, kami akan menunjukkan cara memformat kolom tanggal JSON dalam aplikasi Spring Boot.

Kami akan menjelajahi berbagai cara memformat tanggal menggunakan Jackson , yang digunakan oleh Spring Boot sebagai prosesor JSON default-nya.

2. Menggunakan @JsonFormat pada Bidang Tanggal

2.1. Mengatur Format

Kita dapat 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 bidang ulang tahun , kami menggunakan pola yang hanya menampilkan tanggal sedangkan di bidang pembaruan terakhir kami juga menyertakan waktu.

Kami menggunakan tipe tanggal Java 8 yang cukup berguna untuk menangani tipe temporal. Tentu saja, jika kita perlu menggunakan tipe lama seperti java.util.Date, kita dapat 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 }

Terakhir, mari kita lihat keluaran yang diberikan dengan menggunakan @JsonFormat dengan format tanggal yang diberikan:

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

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

Namun, kami hanya boleh menggunakannya saat kami membutuhkan pemformatan khusus untuk bidang. Jika kita ingin memiliki format umum untuk semua tanggal dalam aplikasi kita, ada cara yang lebih baik untuk mencapainya, seperti yang akan kita lihat nanti.

2.2. Mengatur Zona Waktu

Selain itu, jika kita perlu menggunakan zona waktu tertentu, kita dapat menyetel atribut zona waktu dari @ JsonFormat:

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

Kita tidak perlu menggunakannya jika suatu tipe sudah berisi zona waktu, misalnya dengan java.time.ZonedDatetime.

3. Konfigurasi Format Default

Dan meskipun @JsonFormat itu sendiri kuat, hardcode format dan zona waktu dapat mengganggu kita.

Jika kita ingin mengonfigurasi format default untuk semua tanggal di aplikasi kita, cara yang lebih fleksibel adalah dengan mengonfigurasinya di application.properties :

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

Dan jika kita ingin menggunakan zona waktu tertentu pada tanggal JSON kita, ada juga properti untuk itu:

spring.jackson.time-zone=Europe/Zagreb

Meskipun menyetel format default seperti ini cukup praktis dan mudah, ada kekurangan dari pendekatan ini. Sayangnya, ini tidak berfungsi dengan tipe tanggal Java 8 , seperti LocalDate dan LocalDateTime - kita hanya dapat menggunakannya untuk memformat bidang jenis java.util.Date atau java.util.Calendar . Namun, masih ada harapan, seperti yang akan segera kita lihat.

4. Menyesuaikan ObjectMapper Jackson

Jadi, jika kita ingin menggunakan tipe tanggal Java 8 dan menetapkan format tanggal default, maka kita perlu melihat cara membuat kacang Jackson2ObjectMapperBuilderCustomizer :

@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 default di aplikasi kita. Kita harus mendefinisikan kacang dan mengganti metode penyesuaiannya untuk mengatur format yang diinginkan.

Meskipun pendekatan ini mungkin terlihat agak merepotkan, hal yang menyenangkan tentang itu adalah ia bekerja untuk Java 8 dan tipe tanggal lama.

5. Kesimpulan

Pada artikel ini, kami menjelajahi sejumlah cara berbeda untuk memformat tanggal JSON dalam aplikasi Spring Boot.

Seperti biasa, kami dapat menemukan kode sumber untuk contoh di GitHub.