如何使用 Spring Boot 在 Mongo 中存储原始 JSON

Posted

技术标签:

【中文标题】如何使用 Spring Boot 在 Mongo 中存储原始 JSON【英文标题】:How can a store raw JSON in Mongo using Spring Boot 【发布时间】:2015-06-21 18:17:41 【问题描述】:

我想接受带有 JSON 的 HTTP PUT 请求并将其未经修改地存储在 Mongo 中。我怎样才能做到这一点?我拥有的最好的是:

@RestController
public class ConfigurationController 

    @Autowired
    private MongoTemplate mongoTemplate;

    @RequestMapping
    public DBObject index() 
        return mongoTemplate.getCollection("foo").findOne();
    

    @RequestMapping(method = RequestMethod.PUT)
    ResponseEntity<?> add(@RequestBody DBObject object) 

        mongoTemplate.insert(object, "foo");

        return new ResponseEntity<>(null, HttpStatus.CREATED);
    


【问题讨论】:

【参考方案1】:

在较新版本的 Mongodb(mongo-java-driver 3.0+)中,API 使用 org.bson.Document,因此您的解决方案应如下所示:

@RestController
public class ConfigurationController 

   @Autowired
   private MongoTemplate mongoTemplate;

   @RequestMapping(method = RequestMethod.PUT)
   ResponseEntity<?> add(@RequestBody String jsonString) 

       Document doc = Document.parse(jsonString)
       mongoTemplate.insert(doc, "foo");

       return new ResponseEntity<>(null, HttpStatus.CREATED);
   


【讨论】:

如果我在json中设置了id,它会更新文档吗?【参考方案2】:

也许不是最好的解决方案,但这样的事情应该可以工作 - 更改控制器以接受任何字符串:

... add(@RequestBody String object) ...

并关注http://www.mkyong.com/mongodb/java-mongodb-convert-json-data-to-dbobject/

DBObject dbObject = (DBObject) com.mongodb.util.JSON.parse(object);

【讨论】:

【参考方案3】:

你可以使用json-simple lib,它有小巧优雅的json对象,在你的模型POJO中使用它会自动转换为mongo对象类型

private JSONObject jsonSettings;

【讨论】:

【参考方案4】:

我不确定这是否有帮助,如果您可以选择在 Document 中创建一个 Map 然后创建它,然后在哈希映射中填充“键值”对并存储它。它将按照您的预期存储(这是一个 JSON)。当您在编译期间不知道键或值的名称时,这将很有帮助。

【讨论】:

【参考方案5】:

要存储原始 json 对象/数组,您所要做的就是在服务器端的 Pojo 和/或 DTO 级别将类型声明为“对象”。 “对象”类型也适用于 Spring Data 和 MapStruct。 然后在客户端,您可以将您的 json 数据作为 json 数据发送。

【讨论】:

以上是关于如何使用 Spring Boot 在 Mongo 中存储原始 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 和 Mongo - 如何通过嵌套属性进行查询

如何在mongo spring boot中默认为所有查询添加默认条件

如何在 Spring Boot 中将 mongo db update 运算符应用为 $inc

使用 Spring Boot 在 Mongo 中自动扩展

使用 Mongo 模板在 Spring Boot 中过滤内部 Arraylist 项的 Mongo 查询

Spring Boot Mongo Upsert 数组中的元素