我正在使用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找到精确的编解码器方面没有问题。答案 0 :(得分:0)
对于上述问题,您需要实现AbstractMongoClientConfiguration抽象类来注册自定义编解码器并提供。让我知道您是否需要更多信息