I have register codec registry for POJOs as below
@Singleton
public record Repository(MongodbConfiguration mongodbConfiguration) implements IRepository {
@Override
public <T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
// create codec registry for POJOs
CodecRegistry pojoCodecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoClientSettings settings = MongoClientSettings.builder().addCommandListener(new MongoCommand()).build();
MongoClient client = MongoClients.create(settings);
return client
.getDatabase(mongodbConfiguration.database())
.withCodecRegistry(pojoCodecRegistry)
.getCollection(collectionName, typeParameterClass);
}
}
When I insert or find some record I get an exception as
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'CollectionOrProduct'. Decoding 'collection' errored with: Cannot find a public constructor for 'Optional'.
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:206)
at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:179)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:103)
at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:107)
at org.bson.codecs.pojo.LazyPropertyModelCodec.decode(LazyPropertyModelCodec.java:51)
at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:96)
at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:200)
I do have a public constructor
@Introspected
public class CollectionOrProduct {
private Optional<List<SelectOptionModel>> product;
private Optional<List<SelectOptionModel>> collection;
public CollectionOrProduct() {
}
public CollectionOrProduct(Optional<List<SelectOptionModel>> product, Optional<List<SelectOptionModel>> collection) {
this.product = product;
this.collection = collection;
}
}