2017-07-24 83 views
1

我使用morphia v1.3.2与JDK7,我有由对象和子类表示的文档。在用morphia挣扎了一段时间以利用它的内部映射器之后,我找到了一种方法来根据他们的文档和其他帖子改变一个类的de /序列化方式,我发现所有这些都需要这样的类:Morphia忽略TypeConverter

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 /序列使用所提供的方法中的文件之后。但由于某种原因,每个转换器注册完全被忽略,是否有这种行为的原因?

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

回答

2

精练吗啡转换器的源代码后,我发现,每个注册的转换器实现SimpleValueConverter其中的方式具有这样的的TypeConverter返回简单值(INT /长,字符串等一个真正误导文档(标记接口.. 。))

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(); 
    } 
} 

当我实现它,我有我的疑虑,但由于某种原因,我的转换器并没有忽略,并且文件被解析,因为它应该,一切都像变魔术一样,有人喜欢点击的东西,最后我不再感到沮丧。我希望有人认为这有用

+0

这的确是这样,很好找! – Atorian