如何使用 Spring Boot 在 Json 对象中添加 Total 记录

问题描述 投票:0回答:2

我已经在我的前端实现了分页,因此它需要 Json 对象中的总记录,其中包含特定页码的数据,但我不知道如何将总记录附加到我从中返回的 Json 对象我的 sprinBoot 主控制器。

目前我正在获取

的Json对象
[
    {
        "name": "wrvee",
        "email_id": "[email protected]",
        "check_in": null,
        "check_out": null,
        "data": null
    },
    {
        "name": "sefse",
        "email_id": "[email protected]",
        "check_in": null,
        "check_out": null,
        "data": null
    }
]

但我正在寻找:

[
   total_records:100
   data: {
        "name": "wrvee",
        "email_id": "[email protected]",
        "check_in": null,
        "check_out": null,
        "data": null
    },
    {
        "name": "sefse",
        "email_id": "[email protected]",
        "check_in": null,
        "check_out": null,
        "data": null
    }
]

我的主控制器的 SpringBoot 代码,我在其中使用 List 从服务类获取数据并在方法中返回它。

@GetMapping("/view")
    public List<TableModel> view(
            @RequestParam(value="page",defaultValue = "1",required = false) Integer page
            ) {
        
        return service.view(page);
    }
java spring spring-boot spring-jdbc
2个回答
0
投票

你需要从你的控制器返回一个有两个成员的类对象:

  1. 一个名为“total_records”的整数
  2. a 名为“数据”的 TableModel 对象列表

该类可以称为 TableModelDTO,其中 DTO 代表数据传输对象。

JSON 看起来与您在第二张图片中提供的 JSON 略有不同

{ "total_records" : 100,
  "data" : [{
    "name": "wrvee",
    "email_id": "[email protected]",
    "check_in": null,
    "check_out": null,
    "data": null
},
{
    "name": "sefse",
    "email_id": "[email protected]",
    "check_in": null,
    "check_out": null,
    "data": null
 }]
}

0
投票

你可以像 ianperfitt 说的那样创建一个类


@AllArgsConstructor
@NoArgsConstructor
@Data
class MyResponse {
   private List<Records> records;
   private int count;
}

或者完全按照你的要求


@AllArgsConstructor
@NoArgsConstructor
@Data
class MyResponse {
   private List<Records> data;
   private int total_records;
}

然后在你的控制器中

@GetMapping("/{pageOROffset}/{size}")
public MyResponse someMethodName(@PathVariable(name = "pageOrOffset") int page, @PathVariable(name = "size") int batchSize) {
  List<Records> records = dao.findAll(PageRequest.of(page, size));
  return new MyResponse(records, records.size());
}

或者你可以偷懒,假装这堂课是上课,然后跳过它就去做

@GetMapping("/{pageOROffset}/{size}")
public Map<String, Object> someMethodName(@PathVariable(name = "pageOrOffset") int page, @PathVariable(name = "size") int batchSize) {
  List<Records> records = dao.findAll(PageRequest.of(page, size));
  return Map.of("data", records, "total_record_count", records.size());
}

注意:Map.of() 是 Java 11+ 的一个特性,如果你还没有达到那个版本,你可以这样做

@GetMapping("/{pageOROffset}/{size}")
public Map<String, Object> someMethodName(@PathVariable(name = "pageOrOffset") int page, @PathVariable(name = "size") int batchSize) {
  List<Records> records = dao.findAll(PageRequest.of(page, size));
  HashMap<String, Object> res = new HashMap<>();
  res.put("data", records);
  res.put("total_record_count", records.size();
  return res;
}

Map 是我们拥有的最接近 javascript 对象的东西,因为它能够即时创建松散定义的 pojo。

注意:@AllArgsConstructor、@NoArgsConstructor、@Data都是lombok提供的注解,省去了很多样板代码

© www.soinside.com 2019 - 2024. All rights reserved.