java - 我如何更改由 Repository.findAll() 在 Spring Boot 中创建的 json 数组的格式
问题描述
我想将这个 json 列表更改为另一种格式,方法是在列表之前放置单词“data”并包含在括号中,就像我将它放在 我使用的其余控制器中的示例一样
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/users")
public List<User> getAllUsers() {
return userRepository.findAll();
}
反应是这样的
[
{
"id": 1,
"firstName": "test",
"lastName": "test",
"email": "tt",
"createdAt": null,
"createdBy": "12",
"updatedAt": null,
"updatedBy": "12"
},
{
"id": 2,
"firstName": "test",
"lastName": "test",
"email": "tt",
"createdAt": null,
"createdBy": "12",
"updatedAt": null,
"updatedBy": "12"
}
]
我想变成那样
{
"data": [
{
"id": 1,
"firstName": "test",
"lastName": "test",
"email": "tt",
"createdAt": null,
"createdBy": "12",
"updatedAt": null,
"updatedBy": "12"
},
{
"id": 2,
"firstName": "test",
"lastName": "test",
"email": "tt",
"createdAt": null,
"createdBy": "12",
"updatedAt": null,
"updatedBy": "12"
}
]
}
解决方案
您可以使用 `data 属性创建另一个模型类
public class UserData {
private List<User> data
// getters and setters
}
然后在控制器中更改返回类型
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/users")
public UserData getAllUsers() {
List<User> users = userRepository.findAll();
return new UserData(users);
}
或者,如果您不想创建其他模型,您可以使用Map<String, List<User>>
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/users")
public Map<String, List<User>> getAllUsers() {
List<User> users = userRepository.findAll();
return Collections.singletonMap("data",users);
}
推荐阅读
- pandas - 如何循环导入 Pandas 数据帧
- html - 我的导航栏切换器的引导代码不起作用
- angular - 创建 Angular App 命令行会引发错误
- html - 编写这两个代码有什么区别?
- google-cloud-platform - 我的新 Google 存储桶中 index.html 文件的 URL 包含 google 存储路径
- wpf - 如何在wpf中的文本搜索之后或之前沿着按钮在文本框中搜索文本
- apex - Apex 5 帮助在插入过程之前更改表单值
- sockets - gRPC epoll1 轮询引擎的 Turnstile Polling 机制有什么意义?
- javascript - 引导日期选择器只有月份和年份
- reactjs - 当我们最初寻找播放器在 safari 中无法正常工作时,使用 video-react 包进行视频?