Bagaimana cara membuat Jackson membuat serialisasi objek Joda DateTime saya menurut pola sederhana (seperti "dd-MM-yyyy")?
Saya sudah mencoba:
@JsonSerialize(using=DateTimeSerializer.class)
private final DateTime date;
Saya juga mencoba:
ObjectMapper mapper = new ObjectMapper()
.getSerializationConfig()
.setDateFormat(df);
Terima kasih!
Jawaban:
Ini menjadi sangat mudah dengan Jackson 2.0 dan modul Joda.
Ketergantungan Maven:
Kode dan dokumentasi: https://github.com/FasterXML/jackson-datatype-joda
Binari: http://repo1.maven.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-joda/
sumber
Di objek yang Anda petakan:
Di CustomDateSerializer:
sumber
org.codehaus.jackson
daripadacom.fasterxml.jackson.core
. Menggunakan paket kedua tidak berhasil untuk saya. Faktanya, aplikasi Jersey saya bahkan tidak menghormati@JsonSerialized
anotasi tersebut.Seperti yang dikatakan @Kimble, dengan Jackson 2, menggunakan pemformatan default sangatlah mudah; cukup mendaftar
JodaModule
diObjectMapper
.Untuk serialisasi / de-serialisasi kustom
DateTime
, Anda perlu mengimplementasikan sendiriStdScalarSerializer
danStdScalarDeserializer
; itu cukup berbelit-belit, tapi bagaimanapun juga.Misalnya, inilah
DateTime
serializer yang menggunakanISODateFormat
dengan zona waktu UTC:Dan de-serializer yang sesuai:
Kemudian ikat ini menjadi satu dengan modul:
Kemudian daftarkan modul di
ObjectMapper
:sumber
Solusi mudahnya
Saya mengalami masalah serupa dan solusi saya jauh lebih jelas daripada di atas.
Saya hanya menggunakan pola dalam
@JsonFormat
anotasiPada dasarnya kelas saya memiliki
DateTime
bidang, jadi saya memberi anotasi di sekitar getter:Saya membuat serial kelas dengan
ObjectMapper
Kami menggunakan Jackson 2.5.4
sumber
https://stackoverflow.com/a/10835114/1113510
Meskipun Anda dapat meletakkan anotasi untuk setiap bidang tanggal, lebih baik melakukan konfigurasi global untuk pemeta objek Anda. Jika Anda menggunakan jackson, Anda dapat mengkonfigurasi pegas Anda sebagai berikut:
Untuk CustomObjectMapper:
Tentu saja, SimpleDateFormat dapat menggunakan format apa pun yang Anda butuhkan.
sumber
setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"));
melakukan trik untuk saya, thxSementara itu Jackson mendaftarkan modul Joda secara otomatis saat JodaModule ada di classpath. Saya baru saja menambahkan jackson-datatype-joda ke Maven dan langsung bekerja.
Keluaran JSON:
sumber
Bagi mereka dengan Spring Boot Anda harus menambahkan modul ke konteks Anda dan itu akan ditambahkan ke konfigurasi Anda seperti ini.
Dan jika Anda ingin menggunakan modul waktu java8 baru jsr-310.
sumber
Tampaknya untuk Jackson 1.9.12 tidak ada kemungkinan seperti itu secara default, karena:
Kelas ini membuat serial data menggunakan metode toString () dari Joda DateTime.
Pendekatan yang diusulkan oleh Rusty Kuntz bekerja sempurna untuk kasus saya.
sumber
Saya menggunakan Java 8 dan ini berhasil untuk saya.
Tambahkan ketergantungan pada
pom.xml
dan tambahkan JodaModule di file
ObjectMapper
sumber