Mongodb Morphia忽略类型转换器

Mongodb Morphia忽略类型转换器,mongodb,java-7,morphia,Mongodb,Java 7,Morphia,我将MorphiaV1.3.2与JDK7一起使用,我的文档由对象和子类表示。在与morphia进行了一段时间的斗争以利用其内部映射器之后,我找到了一种方法来改变类根据其文档和其他帖子进行反序列化/序列化的方式,我发现所需的只是拥有一个这样的类: public class MyClassTypeConverter extends TypeConverter { public ActionTypeConverter() { super(MyClass.class);

我将MorphiaV1.3.2与JDK7一起使用,我的文档由对象和子类表示。在与morphia进行了一段时间的斗争以利用其内部映射器之后,我找到了一种方法来改变类根据其文档和其他帖子进行反序列化/序列化的方式,我发现所需的只是拥有一个这样的类:

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();
     }
}
像这样注册这个类型转换器之后

morphia.getMapper().getConverters().addConverter(new MyClassTypeConverter());
现在应该允许使用提供的方法对文档进行反序列化。但是由于某些原因,每个被注册的转换器都被完全忽略了,这种行为有什么原因吗


注意:我找到了这个问题的解决方案。仅将此问题留作参考。

在搜索morphia转换器的源代码后,我发现每个注册的转换器都实现了SimpleValueConverter,顺便说一句,它有一个非常误导性的文档(标记接口,TypeConverter返回简单值(int/long、string等))


当我实现它的时候,我有我的怀疑,但由于某种原因,我的转换器没有被忽略,文档被按它应该的方式解析,一切都像魔术一样工作,就像有东西被点击一样,最后我不再感到沮丧。我希望有人会觉得这个有用

在浏览了morphia转换器的源代码之后,我发现每个注册的转换器都实现了SimpleValueConverter,顺便说一句,它有一个非常误导人的文档(标记接口,TypeConverter返回简单的值(int/long、string等))


当我实现它的时候,我有我的怀疑,但由于某种原因,我的转换器没有被忽略,文档被按它应该的方式解析,一切都像魔术一样工作,就像有东西被点击一样,最后我不再感到沮丧。我希望有人会觉得这很有用

事实确实如此,很好的发现!这确实是事实,很好的发现!
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();
     }
}