gpt4 book ai didi

java - Jackson ObjectMapper 的日期和时间戳序列化

转载 作者:行者123 更新时间:2023-12-05 02:07:33 27 4
gpt4 key购买 nike

Jackson ObjectMapper2.9.x Date 和 Timestamp 序列化为 Long strong> 版本,而 Date 在 2.6.x 中序列化为 Formatted String,在 **2.6 中序列化为 Long Timestamp默认为 .x* 版本。

例子:

case class Test(date: java.sql.Date,  tmp: java.sql.Timestamp)
val test = Test(new java.sql.Date(1588892400000L), new Timestamp(1588892400000L))
writeValueAsString(test)
{"date":"2020-05-08","tmp":1588892400000}//Version 2.6.x 
{"date":1588892400000,"tmp":1588892400000}//Version 2.9.x

But I want to maintain the behavior of 2.6.x version in 2.9.x version.

我尝试了 disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) 但随后它正在将 DateTimeStamp 转换为 Formatted String(如下)。

{"date":"2020-05-08","tmp":"2020-05-07T23:00:00.000+0000"}

如果我设置 DateFormatter**,那么它会以相同的格式转换两者。

setDateFormat(new SimpleDateFormat("yyyy-MM-dd"))`
{"date":"2020-05-08","tmp":"2020-05-08"}

**我只是对它进行了处理,但我不想设置 DateFormatter(即使它可以工作),因为它也会在输入日期格式不同的情况下用于反序列化。

有什么办法可以实现吗?

最佳答案

您可以为 Date 成员使用这样的注释:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")

编辑:

像这样创建一个类:

public class CustomSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(value);
gen.writeString(s);
} catch (DateTimeParseException e) {
System.err.println(e);
gen.writeString("");
}
}
}

并像这样使用:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Date.class, new CustomSerializer());
mapper.registerModule(module);

关于java - Jackson ObjectMapper 的日期和时间戳序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61685822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com