KBONGTimestamp的KMongo序列化

时间:2017-06-29 14:07:50

标签: jackson kotlin

我正在尝试使用Kotlins KMongo lib序列化BSONTimestamp。但是在MongoDb中我只看到它的String表示。

"someVal" : {
    "inc" : 1,
    "time" : 1495104096
}

我是否需要为杰克逊添加一些注释才能正确序列化?

3 个答案:

答案 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,并认为你打算做更高级的事情。