2017-07-24 86 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