如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?

Posted

技术标签:

【中文标题】如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?【英文标题】:How do I PUT and GET JSON object of ANY format in a Spring Boot REST API using MySQL? 【发布时间】:2021-11-16 10:32:54 【问题描述】:

我需要能够将来自 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)获取它(in PUT 请求)。

【问题讨论】:

您可以在发送响应之前使用 ObjectMapper 并将结果转换为 Map 这样,String json = " \"color\" : \"Black\", \"type\" : \"BMW\" "; Map&lt;String, Object&gt; map = objectMapper.readValue(json, Map.class); 【参考方案1】:

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

这是一个有效的 JSON String:

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

这不会编译:

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

解决方案:

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

有几种方法可以实现,看看here的解决方案。它将 JSON 列映射到 Map&lt;String, Object&gt;

【讨论】:

以上是关于如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?

Spring Boot:在Spring Boot中使用Mysql和JPA

如何使用 Spring boot 和 MYSQL 为多级菜单列表创建嵌套 JSON?

如何使用表单创建 mysql 数据库。我正在使用 spring boot

如何使用 MySQL 在 Spring Boot REST API 中放置和获取任何格式的 JSON 对象?

如何在 Spring Boot 中以内存高效的方式迭代 MySQL 中的大量记录