我使用Morphia自定义转换器映射嵌入文档时遇到问题。在我的场景中,我有不可变的实体,没有null-arg构造函数。此实体在我的主实体中用作嵌入实体。因为它是不可变的,所以我应该声明自定义转换器并覆盖decode方法以使用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
如果我删除转换器一切正常编码。有没有办法只使用自定义解码功能并保持默认编码支持。
你需要通过mapper.getConverters().addConverter(new MetaConverter())
告诉Morphia你的转换器