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