我正在构建一个java API,它将从数据库中提取数据并写入CSV文件, 所以我写了如下代码:
InputStreamResource filecontent = //generate csv file
return ResponseEntity.ok().header(Httpheaders.CONTENT_DISPOSITION,"attachment; filename="+ createdfilename).contentType(MediaType.parseMediaType("application/csv").body(filecontent);
现在由于数据库记录增长巨大, 我已将数据检索转换为可分页。
现在我想在 API 响应中发送文件内容和可分页数据响应,如下所示:
Response --> clickable download link and
{
totalitems:"",
current page:"",
noofpage:""
}
有人可以指导如何在 Java API 中执行此操作吗?
可以使用以下方法来轻松传递分页和排序参数:
@GetMapping
ResponseEntity<Page<PostDto>> getPostList(Pageable pageable) {
final Page<PostDto> response = postService.getPostList(pageable);
// code omitted
}
上述方法签名导致 Spring MVC 尝试使用以下默认配置从请求参数派生 Pageable 实例:
• 页面 - 您要检索的页面。 0 索引,默认为 0。
• size - 您要检索的页面的大小。默认为 20。
• sort - 应按格式排序的属性
• 属性,属性(,ASC|DESC)(,IgnoreCase)。默认排序方向是区分大小写的升序。
如果要切换方向或区分大小写,请使用多个排序参数 — 例如,?sort=firstname&sort=lastname,asc&sort=city,ignorecase。
供参考:Spring Docs - 用于可分页和排序的HandlerMethodArgumentResolvers
以下是 API 调用示例: {{baseUrl}}/api/v1/comments?page=0&size=10&sort=comment,desc
或者;
@GetMapping
ResponseEntity<ApiResponse<Page<PostInfo>>> getPosts(
@RequestParam(name = "page", defaultValue = DEFAULT_PAGE)
final Integer page,
@RequestParam(name = "size", defaultValue = DEFAULT_SIZE) final Integer size) {
// Pageable pageable = Pageable.ofSize(size).withPage(page);
Pageable pageable = PageRequest.of(page, size);
final Page<PostInfo> response = postService.getPosts(pageable);
return ResponseEntity.ok(new ApiResponse<>(Instant.now(clock).toEpochMilli(), SUCCESS, response));
}