我正在尝试使用Kotlins KMongo lib序列化BSONTimestamp。但是在MongoDb中我只看到它的String表示。
"someVal" : {
"inc" : 1,
"time" : 1495104096
}
我是否需要为杰克逊添加一些注释才能正确序列化?
答案 0 :(得分:0)
我怀疑这与KMongo实际上有什么关系,但您可以尝试将其报告给github问题。作者非常敏感。
但是,我将此视为杰克逊序列化问题,因此在我看来解决这个问题的最佳方法是创建类似于
的序列化规则object BSONTimestampModule : SimpleModule("BSONTimestampModule") {
init {
addSerializer(BSONTimestamp::class.java, object : JsonSerializer<BSONTimestamp>() {
override fun serialize(value: BSONTimestamp?, gen: JsonGenerator, serializers: SerializerProvider?)
= gen.writeString(value?.time)
})
}
}
我不确切知道BSONTimestamp应该保存什么,所以你可能需要稍微调整一下,但是一旦定义了模块,就像Jackson Mapper一样注册它
KMongoConfiguration.extendedJsonMapper.registerModule(BSONTimestampModule)
答案 1 :(得分:0)
anwser非常简单,我使用了错误的BSONTimestamp类。 出于某种原因,有两个,一个在 org.bson ,一个在 org.bson.types 。 使用 org.bson 中的类,在Serializer中使用KMongo构建它的工作 - 呃!
答案 2 :(得分:0)
听起来你指的是BsonTimestamp然后是mongo-java默认使用的那个(实际上与KMongo没有任何关系)。 BSONTimestamp是一个特殊的实现,用于“内部”到mongo,通常不被外部任何人使用。 org.bson.types包中的所有内容都是如此。这些不是你的正常合同,更多的是与mongo的二进制级别或驱动程序级别的交互。
BsonTimestamp(在org.bson包中)确实是您通过任何mongos日期转换返回/返回的实际数据类型。
抱歉,我看到你使用全部大写的BSON,并认为你打算做更高级的事情。