注册自定义编解码器(mongo-java-driver-3.7.0-rc0)

时间:2018-05-15 07:25:18

标签: java mongodb

我正在使用mongo-java-driver-3.7.0-rc0,我在编解码器注册时遇到了两天的困难。我尝试过两种方法(来自Providers和fromCodecs) - 没有一种方法可以使用。我目前的实现(基于文档)是这样的:

CodecRegistry cr = 
    fromRegistries(com.mongodb.MongoClient.getDefaultCodecRegistry(),
        CodecRegistries.fromProviders(new MongoCacheDocumentCodecProvider()));

MongoClientSettings mongoSettings = MongoClientSettings.builder()                                               
                                    .applyConnectionString(connectionString)                                                       
                                    .codecRegistry(cr)
                                    .build();
client = MongoClients.create(mongoSettings);

(...)

MongoCollection<MongoCacheDocument> collection = 
    db.getCollection(dbName, MongoCacheDocument.class);

之后,我在调试器中看到它已注册,但是当我尝试例如通过

检索该对象
collection.find() 
OR
collection.find(MongoCacheDocument.class)

我得到ClassCastException HashMap - &gt; MongoCacheDocument。当我为org.bson.Document做这件事时,一切顺利。 据我所知,mongo完成的编解码器搜索是递归完成的。为什么在编解码器注册时没有正确解析(顺便说一句,调试器没有显示,自定义代码/编解码器提供程序中有任何活动)。

有人有类似的问题吗?也许这是3.7.0-rc0中的一个错误,其中我不知道?

PS。我使用RC的原因是它在自动模式下支持更广泛的POJO编解码器,并且希望尽可能地保持最新状态,主要是因为Mongo API喜欢不时地改变:)。

编辑:我注意到它返回了一个MapCodec(FYI:MongoCacheDocument extends org.bson.Document)。我看到Document实现了Map,但是在为Document找到精确的编解码器方面没有问题。

1 个答案:

答案 0 :(得分:0)

对于上述问题,您需要实现AbstractMongoClientConfiguration抽象类来注册自定义编解码器并提供。让我知道您是否需要更多信息