现在有两种方法可以做到这一点:
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修复的一部分。