我正在尝试用Kotlins KMongo库来序列化一个BSONTimestamp。但是在MongoDb中,我只看到它的字符串表示。
"someVal" : {
"inc" : 1,
"time" : 1495104096
}我需要为Jackson添加一些注释才能正确地序列化它吗?
发布于 2017-06-30 12:12:18
我怀疑这与KMongo有什么关系,但你可以试着把它报告给github的问题。作者对此反应很快。
但是,我将其理解为Jackson序列化问题,因此在我看来,解决该问题的最好方法是创建一个类似于
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)
发布于 2017-06-30 17:33:40
答案很简单,我用错了BSONTimestamp类。由于某种原因,有两个,一个在org.bson中,另一个在org.bson.types中。使用来自org.bson的类,KMongo内置的序列化程序完成了它的工作--嗯!
发布于 2017-07-01 01:32:55
听起来您指的是BsonTimestamp,是的,它是mongo-java默认使用的(实际上与KMongo没有任何关系)。BSONTimestamp是一个在“内部”用于mongo的特殊实现,通常不会被任何外部用户使用。org.bson.types包中的所有内容也是如此。这些不是你的普通合同,更多的是与mongo的二进制级别或驱动程序级别的交互。
BsonTimestamp (在org.bson包中)实际上是您通过任何mongos日期转换返回的实际数据类型。
很抱歉,我看到你全部使用大写的BSON,并认为你的意思是做一些更高级的事情。
https://stackoverflow.com/questions/44827478
复制相似问题