如何控制Couchbase Java客户端序列化日期的方式?

如何控制Couchbase Java客户端序列化日期的方式?,couchbase,couchbase-java-api,Couchbase,Couchbase Java Api,这是我的代码(Couchbase Java SDK 3) 在Couchbase中查看生成的文档时,我看到java.util.Date已转换为历元毫秒: 1602791214674 我想要的是将日期格式化为yyyy-mm-dd 如何实现这一点?默认情况下,Couchbase Java客户端使用Jackson对JSON进行序列化和反序列化。除非您另有说明,否则它将使用具有默认设置的ObjectMapper。默认情况下,Jackson通过将java.util.Date对象转换为从纪元开始的毫秒来序列

这是我的代码(Couchbase Java SDK 3)

在Couchbase中查看生成的文档时,我看到
java.util.Date
已转换为历元毫秒:

1602791214674
我想要的是将日期格式化为yyyy-mm-dd


如何实现这一点?

默认情况下,Couchbase Java客户端使用Jackson对JSON进行序列化和反序列化。除非您另有说明,否则它将使用具有默认设置的ObjectMapper。默认情况下,Jackson通过将java.util.Date对象转换为从纪元开始的毫秒来序列化这些对象

你有两个选择。如果您使用POJO表示文档内容,则可以将Jackson注释应用于日期字段,以控制它们的[反]序列化方式。这里有一篇文章显示

或者,您可以配置ObjectMapper来更改日期序列化的默认方式。以下是告诉Couchbase Java SDK使用自定义ObjectMapper的方式:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

ClusterEnvironment env = ClusterEnvironment.builder()
    .jsonSerializer(JacksonJsonSerializer.create(objectMapper))
    .build();

Cluster cluster = Cluster.connect("localhost",
    ClusterOptions.clusterOptions("Administrator", "password")
        .environment(env));

Collection c = cluster.bucket("default").defaultCollection();
c.upsert("myDocumentId", new Date());

cluster.disconnect();

// since we created a custom environment, we're responsible for shutting it down
env.shutdown();
这将为您提供一个如下所示的文档:

"2020-10-15T19:59:45.685+0000"

如果您需要不同的格式,您可以将Jackson配置为按自己的方式序列化日期。

Hi Baris。我冒昧地编辑了你的问题。看起来还好吗?是的。非常感谢你。
"2020-10-15T19:59:45.685+0000"