Има следните опции, за да работи.
Чрез подклас
Ако подкласирате всеки път с конкретен общ тип, това работи:
public class MyClassCacheEntity extends CacheEntity<MyClass> {}
Чрез използване на BsonDocument
+ Джаксън
За да избегнете подкласиране, можете да опитате да съхранявате произволни обекти като BsonDocument
-s и ги сериализирайте/десериализирайте с помощта на Jackson:
public class CacheEntity<V> {
private String cacheId;
private BsonDocument rawValue;
// [...]
// sets the value
public void withValue(T o) {
this.rawValue = BsonDocument.parse(new ObjectMapper().writeValueAsString(o))
}
// recovers the value
public T value(Class<T> clazz) {
return new ObjectMapper().readValue(this.rawValue.toJson(), clazz);
}
}
Това работи, докато не избегнете конвенцията за получаване/настройване за withValue()
и value()
методи, в противен случай Mongo започва да се оплаква от същия проблем с генеричните лекарства.
Същото и с чистия bson
Мисля, че можете също да опитате да го направите по същия начин като по-горе, като използвате org.bson.codecs.pojo.PojoCodec
които можете или да създадете, или да извлечете от текущия регистър на кодеците mongo. Ако знаете предварително и му дадете истинска класа, той не трябва да се оплаква от генерични лекарства.