如何使用 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