mysql - 如何使用 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 中)获取它。
解决方案
sampleData
以 JSON 形式返回String
,因此包含转义序列是合理的\"
:
这是一个有效的 JSON String
:
String json = "{\"sample\": \"test\", \"sampleNo\": \"20\"}";
这不会编译:
String invalidJson = "{"sample": "test", "sampleNo": "20"}";
解决方案:
为了获得预期的响应,您必须将 MySQL JSON 列映射到Object
.
有几种方法可以实现这一点,看看这里的解决方案。它将 JSON 列映射到Map<String, Object>
.
推荐阅读
- spring-cloud-config - 带有 git 后端的 Spring Cloud Config Server 使用 github 访问令牌
- python - 如何在浏览器列表上运行所有测试?
- azure-active-directory - 无法将 OIDC 应用与 Azure Active Directory 集成
- android - 如何使用带有 react-native-drive-api-wrapper 的 react native 将图像上传到谷歌驱动器?
- sql - sql server 有没有临时位置保存文件
- visual-studio - Visual Studio 2019 无法加载项目
- ios - 如何在 WKInterfaceLabel 中将 lineBreakMode 设置为自动换行?
- react-native - react-navigation v1 到 v4 升级时出现 navigation.getchildnavigation 错误
- android - Xml 布局在 Kotlin 上被取消分配
- typescript - 如何实例化一个没有空条目的数组数组?