如果你不只是想得到响应中元素的总数,而是JPA方法
PagingAndSortingRepository
中对应实体的总数,可以像下面这样做,这对分页应用程序非常有用:)受Bohdan答案启发(
https://dev59.com/4lcP5IYBdhLWcg3wd5qm#44376133)。
@ControllerAdvice
public class ResourceSizeAdvice implements ResponseBodyAdvice<Page<?>> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return Page.class.isAssignableFrom(returnType.getParameterType());
}
@Override
public Page<?> beforeBodyWrite(Page<?> page, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
serverHttpResponse.getHeaders().add("X-Total-Count",String.valueOf(page.getTotalElements()));
return page;
}
}
请确保调用默认方法的Pageable版本,这样它将返回一个Page
而不是一个List
:
repository.findAll(new PageRequest(0,100));
如果您没有使用Repositories,则需要执行两个查询:
Select * from ...
和
Select count(*) from ...
并返回一个
Wrapper
,其中包含结果列表的内容以及来自计数的总数。然后您可以更改
@ControllerAdvice
类来期望您的
Wrapper
,并从中获取总数并将其放入标头中。