使用Morphia自定义转换器映射嵌入文档时遇到问题。在我的场景中,我有一个不变的实体,没有null-arg构造函数。该实体在我的主要实体中用作嵌入式实体。因为它是不可变的,所以我应该声明自定义转换器,并重写解码方法以使用Builder模式创建我的实体。效果很好:
public class MetaConverter extends TypeConverter implements SimpleValueConverter {
public MetaConverter() {
super(Meta.class);
}
@Override
public Object decode(Class<?> aClass, Object o, MappedField mappedField) {
BasicDBObject metaDBObject = (BasicDBObject) o;
return new Meta.Builder(metaDBObject.getDate("created").toInstant()
, metaDBObject.getDate("updated").toInstant())
.setVersion(metaDBObject.getString("version"))
.build();
}
但是,当我尝试创建新文档时。失败并显示:
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class aaa.bbb.Meta
如果我删除转换器,则在编码方面一切正常。 有没有办法只使用自定义解码功能并保留默认的编码支持。
答案 0 :(得分:0)
您需要通过mapper.getConverters().addConverter(new MetaConverter())
告诉Morphia您的转换器。