现在有两种方法可以做到这一点:
1.使用CollectionCallback
开MongoTemplate
您可以使用 a直接CollectionCallback
处理返回DBObject
,简单地toString()
说:
template.execute("jvmInfo", new CollectionCallback<String>() {
String doInCollection(DBCollection collection) {
DBCursor cursor = collection.find(query)
return cursor.next().toString()
}
}
你仍然会将异常翻译成 Spring 的DataAccessExceptions
. 请注意,这有点脆弱,因为我们希望查询只返回一个结果,但这可能是您在尝试生成时必须注意的事情String
。
2.注册一个Converter
从DBObject
到String
你可以实现一个 SpringConverter
来toString()
为你做这件事。
class DBObjectToStringConverter implements Converter<DBObject, String> {
public String convert(DBObject source) {
return source == null ? null : source.toString();
}
}
然后,您可以使用 XML 配置或覆盖customConversions()
返回 anew CustomConversions(Arrays.asList(new DBObjectToStringConverter()))
以将其注册到您的MongoConverter
. 然后,您可以简单地执行以下操作:
String result = mongoTemplate.findOne(basicQuery, String.class, "jvmInfo");
我将把刚刚展示的转换器添加到 Spring Data MongoDB 并默认为即将发布的 1.3 GA 版本注册它,并将修复移植回 1.2.x 作为DATAMONGO-743修复的一部分。