Saya mengalami masalah kecil dengan memformat Java 8 LocalDateTime di Aplikasi Spring Boot saya. Dengan tanggal 'normal' saya tidak memiliki masalah, tetapi bidang LocalDateTime diubah menjadi berikut ini:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Sementara saya ingin mengubahnya menjadi seperti:
"startDate": "2015-01-01"
Kode saya terlihat seperti ini:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Tetapi salah satu anotasi di atas tidak berfungsi, tanggal terus berformat seperti di atas. Saran diterima!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
entri, seperti yang disarankan oleh jawaban @patelb.@JsonSerialize
anotasi yang disebutkan Nick agar berfungsi.Saya menambahkan
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
ketergantungan dan mulai mendapatkan tanggal dalam format berikut:yang bukan yang saya inginkan tetapi saya semakin dekat. Saya kemudian menambahkan yang berikut ini
ke file application.properties yang memberi saya format yang benar yang saya butuhkan.
sumber
jackson-datatype-jsr310
ketergantungan. Ini harus menjadi jawaban yang diterima.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Ini dia di maven, dengan properti sehingga Anda dapat bertahan di antara peningkatan sepatu bot musim semi
sumber
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Ketergantungan
2) Anotasi dengan format tanggal-waktu.
3) Konfigurasi Musim Semi.
sumber
Saya menemukan solusi lain yang dapat Anda ubah ke format apa pun yang Anda inginkan dan terapkan ke semua tipe data LocalDateTime dan Anda tidak perlu menentukan @JsonFormat di atas setiap tipe data LocalDateTime. pertama tambahkan ketergantungan:
Tambahkan kacang berikut:
di file konfigurasi Anda tambahkan yang berikut ini:
Ini akan membuat serial dan de-serialisasi semua properti LocalDateTime dan ZonedDateTime selama Anda menggunakan objectMapper yang dibuat oleh spring.
Format yang Anda dapatkan untuk ZonedDateTime adalah: "2017-12-27T08: 55: 17.317 + 02: 00 [Asia / Yerusalem]" untuk LocalDateTime adalah: "2017-12-27T09: 05: 30.523"
sumber
SimpleModule
meluasModule
.Module
adalah abstrak.val bean = new SimpleModule();
bekerja dengan sempurna.Menulis jawaban ini sebagai pengingat untuk saya juga.
Saya menggabungkan beberapa jawaban di sini dan pada akhirnya jawaban saya bekerja dengan sesuatu seperti ini. (Saya menggunakan SpringBoot 1.5.7 dan Lombok 1.16.16)
sumber
DateTimeFormat
dan lainnya.Ini bekerja dengan baik:
Tambahkan ketergantungan:
Tambahkan anotasi:
Sekarang, Anda harus mendapatkan format yang benar.
Untuk menggunakan pemeta objek, Anda perlu mendaftarkan JavaTime
sumber
Seperti yang telah disebutkan, spring-boot akan mengambil semua yang Anda butuhkan (untuk web dan webflux starter).
Tetapi yang lebih baik lagi - Anda tidak perlu mendaftarkan modul apa pun sendiri. Coba lihat di sini . Karena
@SpringBootApplication
digunakan di@EnableAutoConfiguration
bawah tenda, artinyaJacksonAutoConfiguration
akan ditambahkan ke konteks secara otomatis. Sekarang, jika Anda melihat ke dalamJacksonAutoConfiguration
, Anda akan melihat:Orang ini akan dipanggil dalam proses inisialisasi dan akan mengambil semua modul yang dapat ditemukannya di classpath. (Saya menggunakan Spring Boot 2.1)
sumber
Saya menggunakan Springboot 2.0.6 dan karena alasan tertentu, perubahan aplikasi yml tidak berfungsi. Dan juga saya memiliki lebih banyak persyaratan.
Saya mencoba membuat ObjectMapper dan menandainya sebagai Primer tetapi boot musim semi mengeluh bahwa saya sudah memiliki jacksonObjectMapper sebagai ditandai Utama !!
Jadi inilah yang saya lakukan. Saya membuat perubahan pada mapper internal.
Serializer dan Deserializer saya spesial - berhubungan dengan 'dd / MM / YYYY'; dan saat de-serializing - mencoba yang terbaik untuk menggunakan 3-4 format populer untuk memastikan saya memiliki LocalDate.
sumber
@JsonDeserialize(using= LocalDateDeserializer.class)
tidak bekerja untuk saya dengan ketergantungan di bawah ini.Saya telah menggunakan konverter kode di bawah ini untuk deserialize tanggal menjadi
java.sql.Date
.sumber
cukup gunakan:
atau Anda dapat menggunakan pola sesuka Anda misalnya:
('-' in place of '/')
sumber
Saya menggunakan Spring Boot 2.1.8. Saya telah mengimpor
yang mencakup jackson-datatype-jsr310 .
Kemudian, saya harus menambahkan anotasi ini
dan berhasil. JSON terlihat seperti ini:
sumber
spring-boot-starter-json
hanya diperlukan jikaspring-boot-starter-web
hilang.