Я получаю следующую ошибку при попытке десериализации объекта, содержащего универсальный List<List<T>>
:
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class java.lang.Object
Я обнаружил, что исключение выдается при попытке десериализации спискаОднако, если я изменю поле на List<T>
, оно будет работать.Пожалуйста, смотрите код ниже.
У меня есть следующие Java pojos (с геттерами и сеттерами):
public class A<T> {
private List<List<T>> values;
}
public class B extends A<Float>{
@BsonId
private Integer id;
}
Мой клиент MongoDB настроен со следующим реестром кодеков:
CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder()
.conventions(Collections.singletonList(Conventions.ANNOTATION_CONVENTION))
.automatic(true)
.build()));
Когда я изменяю классы на следующую структуру, все работает:
public class A<T> {
private List<T> values;
}
public class B extends A<List<Float>>{
@BsonId
private Integer id;
}
Я ожидаю, что Mongo будет поддерживать Generics на любом уровне, но вместо этого я получаю следующую трассировку стека:
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class java.lang.Object.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)
at org.bson.codecs.pojo.FallbackPropertyCodecProvider.get(FallbackPropertyCodecProvider.java:38)
at org.bson.codecs.pojo.PropertyCodecRegistryImpl.get(PropertyCodecRegistryImpl.java:44)
at org.bson.codecs.pojo.CollectionPropertyCodecProvider.get(CollectionPropertyCodecProvider.java:37)
at org.bson.codecs.pojo.PropertyCodecRegistryImpl.get(PropertyCodecRegistryImpl.java:44)
at org.bson.codecs.pojo.CollectionPropertyCodecProvider.get(CollectionPropertyCodecProvider.java:37)
at org.bson.codecs.pojo.PropertyCodecRegistryImpl.get(PropertyCodecRegistryImpl.java:44)
at org.bson.codecs.pojo.PojoCodecImpl.addToCache(PojoCodecImpl.java:211)
at org.bson.codecs.pojo.PojoCodecImpl.specialize(PojoCodecImpl.java:80)