Mongo Java驱动程序3.6:更改流编解码器错误



我正在尝试使用Mongo Java Driver 3.6使用新的ChangEstream功能,但我被卡住了。这是我的错误:

ChangeStreamDocument contains generic types that have not been specialised.
Top level classes with generic types are not supported by the PojoCodec.

这是我启动ChangEstream的方式:

CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
        fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase(mongoClientURI.getDatabase())
                                    .withCodecRegistry(pojoCodecRegistry);
collection.insertOne(Person.builder().age(100).build());
collection.insertOne(Person.builder().age(100).build());
collection.watch().forEach((Block<? super ChangeStreamDocument<Person>>) personChangeStreamDocument -> {
    System.out.println(personChangeStreamDocument.getFullDocument());
});

Person只是一个pojo。

如Java-2800中所述,当前有一个自动ProjoCodecProvider的错误。

临时解决方法是注册POJO类,例如:

CodecRegistry pojoCodecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
                                 fromProviders(PojoCodecProvider.builder().register(Person.class).build())); 

此外,请注意,如果您在集合上打开更改流之前,您执行了插入操作,则您 May 无法查看事件插入。尽管您可以通过从另一个线程或过程中插入/更改文档来轻松测试它。有关更多信息,请参见更改流。

更新:票务JAVA-2800已解决,并在MongoDB Java驱动程序v3.6.4 上提供了修复版本。

最新更新