如何使用 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 并将结果转换为 MapString json = " \"color\" : \"Black\", \"type\" : \"BMW\" "; Map<String, Object> 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<String, Object>
。
【讨论】:
以上是关于如何使用 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