我有以下代码:
@RequestMapping(value = "/envinfo", method = RequestMethod.GET)
@ResponseBody
public Map getEnvInfo()
{
BasicQuery basicQuery = new BasicQuery("{_id:'51a29f6413dc992c24e0283e'}", "{'envinfo':1, '_id': false }");
Map envinfo= mongoTemplate.findOne(basicQuery, Map.class, "jvmInfo");
return envinfo;
}
如你所见,代码:
- 从 MongoDB 中检索 JSON
- 将其转换为
Map
对象 Map
对象随后由 Spring MongoData 转换为 JSON,然后返回给浏览器。
是否可以直接从MongoDb返回原始json而不经过中间转换步骤?
最佳答案
现在有两种方法可以做到这一点:
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。将 Converter
从 DBObject
注册到 String
您可以实现一个 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 修复的一部分.
关于java - 如何直接从 Java 中的 mongodb 查询返回原始 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18304516/