现在有两种方法可以实现这个:
1. 使用MongoTemplate
上的CollectionCallback
您可以使用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. 注册一个从DBObject
到String
的Converter
您可以实现一个Spring Converter
来执行toString()
。
class DBObjectToStringConverter implements Converter<DBObject, String> {
public String convert(DBObject source) {
return source == null ? null : source.toString();
}
}
你可以使用XML配置或覆盖customConversions()
方法,返回new 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问题的一部分。