首页 > 解决方案 > 如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?

问题描述

我需要能够将来自 POSTMAN 的 JSON 数据(没有固定格式)存储在数据库中(在 MYSQL 中最好使用数据类型:JSON),然后发送 GET 请求以获取相同的值。数据可以通过我将作为路径变量发送的 id 来唯一标识。

我无法定义实体类,因为 JSON 没有固定格式。我该如何进行?

  @PutMapping("/sample/{sampleNo}")
  public ResponseEntity<Object> addSampleData(
      @ApiParam("Sampleto PUT") @PathVariable Long sampleNo, @RequestBody String sampleBody) {
    if (sampleBody!= null) {
      sampleService.save(new Sample(sampleNo, sampleBody));
      return new ResponseEntity<>(HttpStatus.OK);
    } else {
      return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
  }

不确定如何继续使用“保存”功能,以便将数据存储为 JSON 对象,因为即使我使用数据类型 JSON n mySQL,GET 也会返回带有“\”的字符串。

{
   "sampleNo": 1,
   "sampleData": "{\"sample\": \"test\", \"sampleNo\": \"20\"}"
}

示例:PUT 请求正文

{
    "field1": "test",
    "field2": 20
}

预期 GET 响应正文

{
    "field1": "test",
    "field2": 20
}

PS:我不需要处理数据,所以我如何存储它并不重要,我只需要能够以它到达的相同格式(JSON)(在 PUT req 中)获取它。

标签: mysqljsonspring-bootrest

解决方案


sampleData以 JSON 形式返回String,因此包含转义序列是合理的\"

这是一个有效的 JSON String

String json = "{\"sample\": \"test\", \"sampleNo\": \"20\"}";

这不会编译:

String invalidJson = "{"sample": "test", "sampleNo": "20"}";

解决方案:

为了获得预期的响应,您必须将 MySQL JSON 列映射到Object.

有几种方法可以实现这一点,看看这里的解决方案。它将 JSON 列映射到Map<String, Object>.


推荐阅读