我已经在我的前端实现了分页,因此它需要 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);
}
你需要从你的控制器返回一个有两个成员的类对象:
该类可以称为 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
}]
}
你可以像 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
注意:@AllArgsConstructor、@NoArgsConstructor、@Data都是lombok提供的注解,省去了很多样板代码