java - 如何直接从 Java 中的 mongodb 查询返回原始 JSON?

标签 java spring mongodb spring-data spring-data-mongodb

我有以下代码:

@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;
}

如你所见,代码:

  1. 从 MongoDB 中检索 JSON
  2. 将其转换为 Map 对象
  3. 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。将 ConverterDBObject 注册到 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/

相关文章:

java - Hibernate Spatial 5.0.4.Final 和 PostgreSQL 几何列上的映射错误

java - 是否有一种类型可以保存 java 类的所有可能的 setter 引用,而不管所设置的类型如何?

java - 如何获取字符串形式的时间差

java - <表格 :select> objects binding through Converter in Spring MVC

node.js - 通过node.js和mongodb实现/使用quill的正确方法是什么?

java - 当我关闭连接时,Spring Reactive : java. io.IOException : An established connection was aborted by the software in your host machine,

java - 尝试查看 map 内容

java - 直接从 Spring Controller 返回 byte[] 是否会造成内存泄漏?

mongodb - Openshift - 如何运行 mongoexport 以导出 mongodb 集合

javascript - 在 Express 中监听 MongoDB 的变化