Dan*_*iel 4 java date jackson kotlin objectmapper
我试图弄清楚为什么杰克逊(2.9.5)格式错误地来自Java 8。
data class Test(
val zonedDateTim: ZonedDateTime = ZonedDateTime.now(),
val offsetDateTim: OffsetDateTime = OffsetDateTime.now(),
val date: Date = Date(),
val localDateTime: LocalDateTime = LocalDateTime.now()
)
val mapper = ObjectMapper().apply {
registerModule(KotlinModule())
registerModule(JavaTimeModule())
dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
enable(SerializationFeature.INDENT_OUTPUT)
}
println(mapper.writeValueAsString(Test()))
Run Code Online (Sandbox Code Playgroud)
从我提供的日期格式中,我希望得到的日期格式没有毫秒,但是结果看起来像这样:
{
"zonedDateTim" : "2018-07-27T13:18:26.452+02:00",
"offsetDateTim" : "2018-07-27T13:18:26.452+02:00",
"date" : "2018-07-27T13:18:26",
"localDateTime" : "2018-07-27T13:18:26.452"
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助。
最好,丹尼尔
dateFormat
仅适用于Date
对象-其他3个对象由处理JavaTimeModule
,默认情况下使用ISO格式。
如果要使用其他格式,可以使用:
val format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
val javaTimeModule = JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer(format));
javaTimeModule.addSerializer(ZonedDateTime.class, ZonedDateTimeSerializer(format));
mapper.registerModule(javaTimeModule);
Run Code Online (Sandbox Code Playgroud)
您可能还需要添加,mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
但是我不是100%确信这是必要的。
另请注意,使用该格式时,您将丢失时区和偏移信息。因此,您可能需要偏移/分区日期时间的其他格式。
归档时间: |
|
查看次数: |
728 次 |
最近记录: |