我在使用自定义转换器时发现了一个问题。
假设我的对象是:
public class Foo {
private String id;
private Bar bar;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Bar getBar() {
return bar;
}
public void setBar(Bar bar) {
this.bar = bar;
}
}
public class Bar {
private String id;
private String property;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
}
如果将它们插入 MongoDB,一切正常,只要不涉及自定义转换器。
Bar bar = new Bar();
bar.setProperty("Test");
Foo foo = new Foo();
foo.setBar(bar);
mongoTemplate.insert(bar);
mongoTemplate.insert(foo);
结果:
{
"_id" : {
"$oid" : "51a346059f2c9d656019798e"
},
"_class" : "Bar",
"property" : "Test"
}
{
"_id" : {
"$oid" : "51a346059f2c9d656019798f"
},
"_class" : "Foo",
"bar" : {
"_id" : {
"$oid" : "51a346059f2c9d656019798e"
},
"property" : "Test"
}
}
现在我写了一个自定义转换器,因为 Foo 需要以一种特殊的方式存储。
public class FooWriteConverter implements Converter<Foo, DBObject> {
@Override
public DBObject convert(Foo source) {
DBObject dbo = new BasicDBObject();
dbo.put("id", source.getId());
dbo.put("bar", source.getBar());
return dbo;
}
}
现在我得到这个错误。
Caused by: java.lang.IllegalArgumentException: can't serialize class Bar
所以,看起来我不能回退到对象属性的默认转换,即使用自定义转换器进行转换?!
任何有用的解决方案,而不是手动进行所有转换?