Morphia 忽略 TypeConverter

Morphia ignores TypeConverter

我在 JDK7 中使用 morphia v1.3.2,我有由对象和子 classes 表示的文档。在与吗啡斗争了一段时间以利用它的内部映射器之后,我找到了一种方法来根据他们的文档和其他帖子改变 class 是 de/serialized 的方式,我发现所需要的只是拥有这样的 class:

public class MyClassTypeConverter extends TypeConverter {

    public ActionTypeConverter() {
        super(MyClass.class);
    }

    @Override
     public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
          //do something to parse my class
          return new MyClass((DBObject) fromDBObject);
     }

     @Override
     public Object encode(final Object value, final MappedField optionalExtraInfo) {
        //do something to represent this  as JSON
        return value.toString();
     }
}

像这样注册这个 typeConverter 之后

morphia.getMapper().getConverters().addConverter(new MyClassTypeConverter());

它现在应该允许 de/serialize 使用提供的方法来处理文档。但由于某种原因,每个正在注册的转换器都被完全忽略,是否有这种行为的原因?

注意:我找到了解决此问题的方法。这个问题留在这里仅供参考

在搜索吗啡转换器的源代码后,我发现每个注册的转换器都实现了 SimpleValueConverter,顺便说一句,它有一个非常误导性的文档(TypeConverter [=18= 的标记接口] 简单值(int/long、字符串等...))

public class MyClassTypeConverter extends TypeConverter implements SimpleValueConverter {

    public ActionTypeConverter() {
        super(MyClass.class);
    }

    @Override
     public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
          //do something to parse my class
          return new MyClass((DBObject) fromDBObject);
     }

     @Override
     public Object encode(final Object value, final MappedField optionalExtraInfo) {
        //do something to represent this  as JSON
        return value.toString();
     }
}

当我实施它时,我有疑虑,但出于某种原因,我的转换器没有被忽略,文档被按它应该的方式解析,一切都像魔术一样工作,就像点击了什么东西,最后我不再沮丧了.我希望有人觉得这有用