MongoDB:注册编解码器(Java)
我已经试了大约一个小时来注册一个编解码器,我为我的一个班级制作了一个我正在制作的游戏。该类称为Item
。我从以下三个地方尝试了代码和建议:
- https://mongodb.github.io/mongo-java-driver/3.0/bson/codecs/
- https://matteosilvestri.blogspot.ca/2015/03/overview-of-pluggable-codecs-in-mongodb.html
- https://gist.github.com/JaiHirsch/cada9eaac3e24ef5a62a
下面是我的代码:
CodecRegistry defaultCodecRegistry = MongoClient.getDefaultCodecRegistry();
MyCodecProvider myCodecProvider = new MyCodecProvider();
ItemCodec itemCodec = new ItemCodec(defaultCodecRegistry);
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(itemCodec), CodecRegistries.fromProviders(myCodecProvider), defaultCodecRegistry);;
MongoClientOptions options = MongoClientOptions.builder().codecRegistry(codecRegistry).build();
client = new MongoClient("localhost:27017", options);
所以我构建了一个名为MyCodecProvider
的编解码器和编解码器提供程序,那么我做错了什么,这怎么会如此复杂?我错过什么了吗?它似乎比需要的更复杂。如果您需要更多代码,请询问。谢谢
编辑:我得到的确切错误是org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class [Lnet.hollowbit.archipeloserver.items.Item;.
另外,我正在尝试解析一个项目数组,我是否也需要专门为该数组制作一个编解码器
# 1 楼答案
更好的方法是实现您自己的codeprovider。通过这种方式,您可以管理所有使用的编解码器实现。使用您的案例:
创建mycodeprovider
现在你可以在你的主课上简单地做这个
//替换。put(BsonType.DATE\u TIME,Timestamp.class);如果您有复杂的java类型
# 2 楼答案
您可以使用ArrayList对阵列执行Mongo编解码器,如下所示:
com。实例模型命令
这是表示订单的类。它包括项目的ArrayList
com。实例模型项目
这是表示订单项的类。订单中可以有任意数量的项目。项目嵌入到Mongo中的订单文档中
com。实例蒙戈。项目转换器
将项目转换为文档或从文档转换为项目的简单转换器类
com。实例蒙戈。项目编码解码器
用于对项目进行编码和解码的编解码器
com。实例蒙戈。编解码器
用于编码/解码顺序的编解码器
com。实例主要的主要
应用程序的主类。在这里,我们注册编解码器并创建MongoClient
在那里,您可以向Mongo读/写订单和商品