как изменить формат массива json, созданного Repository.findAll() при загрузке spring

#java #arrays #json #list #spring-boot

#java #массивы #json #Список #spring-boot

Вопрос:

Я хочу изменить этот список json на другой формат, поместив слово «данные» перед списком и заключив его в круглые скобки, как в примерах, которые я записал
в rest controller, который я использую

    @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:

Вы можете создать другой класс модели с `свойством данных

 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);
}