我如何在 Spring Boot 中更改 Repository.findAll() 生成的 json 数组的格式

Posted

技术标签:

【中文标题】我如何在 Spring Boot 中更改 Repository.findAll() 生成的 json 数组的格式【英文标题】:how I change the format of the json array that made by Repository.findAll() in spring boot 【发布时间】:2021-05-29 18:19:34 【问题描述】:

我想将此 json 列表更改为另一种格式,方法是在列表前加上“数据”一词并像我放下它的示例一样包含在括号中 我使用的其余控制器

   @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"
        
    ]
    
 

【问题讨论】:

【参考方案1】:

您可以使用 `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&lt;String, List&lt;User&gt;&gt;

  @CrossOrigin(origins = "http://localhost:8080")
  @GetMapping("/users")
  public Map<String, List<User>> getAllUsers() 
  List<User> users = userRepository.findAll();
  return Collections.singletonMap("data",users);

【讨论】:

以上是关于我如何在 Spring Boot 中更改 Repository.findAll() 生成的 json 数组的格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中更改允许的标头

如何在 Spring Boot Restful 中更改大量数据(更新多个数据)

我如何在 Spring Boot 中更改 Repository.findAll() 生成的 json 数组的格式

如何使用 Spring Boot 在 Mongodb 中保存重复项?

如何在运行时更改日志级别而不重新启动 Spring Boot 应用程序

如何在 Spring Boot 中从 mongodb 更改 geojson (GeoJsonPolygon) 的编组?