Morphia忽略TypeConverter

时间:2017-07-24 22:09:25

标签: mongodb java-7 morphia

我使用morphia v1.3.2和JDK7,我有由Objects和子类表示的文档。在与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());

现在应该允许使用提供的方法对文档进行de /序列化。但由于某些原因,每个被注册的转换器都被完全忽略了,是否有理由这样做?

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

1 个答案:

答案 0 :(得分:3)

在搜索了morphia转换器的源代码之后,我发现每个注册的转换器都实现了 SimpleValueConverter ,顺便说一下,它有一个非常误导的文档(Marker接口,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();
     }
}

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