Spring data Page.getTotalElements est incorrect sur la dernière page
salut,
Sur la dernière page, PageImpl.getTotalElements ne renvoie pas le nombre total correct d'éléments.
J'ai besoin de page.getTotalElements () afin d'afficher le nombre total de lignes dans la partie web
avec cette maniere :
Code:
resp.headers.get('X-Total-Count')
,
j'utilise ce code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| @GetMapping("/student")
@Timed
public ResponseEntity<List<StudentDTO>> getAllStudent(Pageable pageable) {
Page<StudentDTO> page=studentService.getAllStudent(pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/student");
return ResponseEntity.ok().headers(headers).body(page.getContent());
}
public Page<StudentDTO> getAllStudent(Pageable pageable) {
Integer count = 0;
if (pageable != null && !pageable.isUnpaged()) {
String queryCountStr = "SELECT count(*) ";
queryCountStr += " FROM student ";
count = getCount(queryCountStr, new String[] { }, new Object[]
{ });
}
String querystr = "SELECT ";
querystr += " student.name,student.department ";
querystr += " FROM student ";
if (pageable != null && !pageable.isUnpaged()) {
querystr += "LIMIT " + pageable.getPageSize() + " OFFSET " + pageable.getPageNumber();
}
List<StudentDTO> students = getResultList(querystr, "studentMap", new String[]
{ },
new Object[] {}).stream().map(object -> (StudentDTO) object).collect(Collectors.toList());
return (pageable != null && pageable.isUnpaged()) ? new PageImpl<StudentDTO>(students)
: new PageImpl<StudentDTO>(students, pageable, count);
}
public static <T> HttpHeaders generatePaginationHttpHeaders(Page<T> page, String baseUrl) {
HttpHeaders headers = new HttpHeaders();
headers.add("X-Total-Count", Long.toString(page.getTotalElements()));
String link = "";
if ((page.getNumber() + 1) < page.getTotalPages()) {
link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\",";
}
// prev link
if ((page.getNumber()) > 0) {
link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\",";
}
// last and first link
int lastPage = 0;
if (page.getTotalPages() > 0) {
lastPage = page.getTotalPages() - 1;
}
link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\",";
link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\"";
headers.add(HttpHeaders.LINK, link);
return headers;
} |
merci d'avance