gpt4 book ai didi

morphia - 使用 Morphia 手动转换第 3 方类

转载 作者:行者123 更新时间:2023-12-02 21:30:54 25 4
gpt4 key购买 nike

长话短说:是否可以使用 Morphia 为第三方库类编写类型转换器?

长话短说:我是 Morphia 的新手。我有一个实体类,其中包含一个类型为 javax.activation.MimeType 的字段。当我尝试保存类的实例时,Morphia 提示它“无法序列化类 javax.activation.MimeType”。我尝试编写一个 TypeConverter 并将其添加到转换器列表中,但它不起作用。以下是代码片段:

实体.类

@Entity
@Converters(MimeTypeConverter.class)
public class Entity {
@Id ObjectId id;
String name;
javax.activation.MimeType mimeType;
}

MimeTypeConverter.class

public class MimeTypeConverter extends TypeConverter {

@Override
public Object decode(Class targetClass,
Object fromDBObject,
MappedField optionalExtraInfo) {
MimeType mimetype;

BasicDBObject dbObject = (BasicDBObject) fromDBObject;
String mimeString = dbObject.getString("mimeType");
try{
mimetype = new MimeType(mimeString);
} catch(MimeTypeParseException ex){
mimetype = new MimeType();
}

return mimetype;
}

@Override
public Object encode(Object value, MappedField optionalExtraInfo) {
MimeType mimetype = (MimeType) value;
return mimetype.getBaseType();
}

@Override
public Class[] getSupportTypes() {
return new Class[]{MimeType.class};
}
}

测试用例

Morphia morphia = new Morphia().map(Entity.class);
morphia.getMapper().getConverters().addConverter(new MimeTypeConverter());
Datastore ds = morphia.createDatastore(new MongoClient(), "test"); //UnknownHostException

Entity entity = new Entity();
entity.name = "test name";
entity.mimeType = new MimeType("text/plain"); //MimeTypeParseException

ds.save(entity); // FAILS WITH ERROR HERE

我希望 MimeType 类以“foo/bar”样式序列化,并从中反序列化。这可能吗?

最佳答案

这实际上对我使用 0.107 代码有效。我正在使用一个稍微修改过的转换器,这可能有助于我的成功。我正在使用的转换器以及测试如下。

@Entity
@Converters(MimeTypeConverter.class)
public static class MimeTyped {
@Id
private ObjectId id;
private String name;
private javax.activation.MimeType mimeType;
}

public class MimeTypeConverter extends TypeConverter {
public MimeTypeConverter() {
super(MimeType.class);
}

@Override
public Object decode(final Class targetClass, final Object fromDBObject, final MappedField optionalExtraInfo) {
try {
return new MimeType(((BasicDBObject) fromDBObject).getString("mimeType"));
} catch (MimeTypeParseException ex) {
return new MimeType();
}
}

@Override
public Object encode(final Object value, final MappedField optionalExtraInfo) {
return ((MimeType) value).getBaseType();
}
}

@Test
public void mimeType() throws UnknownHostException, MimeTypeParseException {
getMorphia().getMapper().getConverters().addConverter(new MimeTypeConverter());
MimeTyped entity = new MimeTyped();
entity.name = "test name";
entity.mimeType = new MimeType("text/plain"); //MimeTypeParseException
final DBObject dbObject = getMorphia().toDBObject(entity);
assertEquals("text/plain", dbObject.get("mimeType"));
getDs().save(entity);
}

关于morphia - 使用 Morphia 手动转换第 3 方类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com