有兩個問題:
1.如何調用其他轉換器?
2.如何爲類型參數不是靜態已知的泛型類創建轉換器?
第一個是可以通過創建MappingMongoConveter和定製轉換器一起:
@Configuration
public class CustomConfig extends AbstractMongoConfiguration {
@Override
protected String getDatabaseName() {
// ...
}
@Override
@Bean
public Mongo mongo() throws Exception {
// ...
}
@Override
@Bean
public MappingMongoConverter mappingMongoConverter() throws Exception {
MappingMongoConverter mmc = new MappingMongoConverter(
mongoDbFactory(), mongoMappingContext());
mmc.setCustomConversions(new CustomConversions(CustomConverters
.create(mmc)));
return mmc;
}
}
public class FooConverter implements Converter<Foo, DBObject> {
private MappingMongoConverter mmc;
public FooConverter(MappingMongoConverter mmc) {
this.mmc = mmc;
}
public DBObject convert(Foo foo) {
// ...
}
}
public class CustomConverters {
public static List<?> create(MappingMongoConverter mmc) {
List<?> list = new ArrayList<>();
list.add(new FooConverter(mmc));
return list;
}
}
第二個是更困難的,因爲類型擦除。我試圖爲Scala的地圖創建一個轉換器,但沒有找到方法。無法在寫入時獲取源地圖的準確類型信息,或在讀取時獲取目標地圖的準確類型信息。
對於非常簡單的情況,例如如果你不需要處理所有可能的參數類型,並且在閱讀時沒有歧義,但它可能是可能的。