spring-projects / spring-boot

Spring Boot
https://spring.io/projects/spring-boot
Apache License 2.0
74.99k stars 40.65k forks source link

Spring boot: Pagination from page 1 (one-indexed-parameters) not runs well #36655

Closed efimatica closed 1 year ago

efimatica commented 1 year ago

Good morning from spain. My scope is Spring boot 3.1 I'm implemeting REST service and I have pagination for return large list of elements. For default Spring boot manage the page from 0 index. I have reading that is possible start pagination from page 1, using this senetence in application.yaml:

spring:
  data:
    web:
      pageable:
        one-indexed-parameters: true

With new settings, the page 0 and the page 1 is the same. It show the same result. The problem is that the param "number" on paginations settings always show one page less, that I access:

Examples:

To page 0

Request: 
{{base_url}}/system/business/pagination?size=5&page=0

Response details:
    "pagination": {
    "totalPages": 4,
    "totalElements": 17,
    "size": 5,
    "number": 0,
    "numberOfElements": 5,
    "empty": false,
    "first": true,
    "last": false,
    "sorted": false
}

Note: I would prefer that it returns null. 

To page 1

Request: 
{{base_url}}/system/business/pagination?size=5&page=1

Response details:
    "pagination": {
    "totalPages": 4,
    "totalElements": 17,
    "size": 5,
    "number": 0,
    "numberOfElements": 5,
    "empty": false,
    "first": true,
    "last": false,
    "sorted": false
}

Note: Returns the same that page 0. See that number value is wrong. It would have to be 1. 

To page 2

Request: 
{{base_url}}/system/business/pagination?size=5&page=2

Response details:
    "pagination": {
    "totalPages": 4,
    "totalElements": 17,
    "size": 5,
    "number": 1,
    "numberOfElements": 5,
    "empty": false,
    "first": false,
    "last": false,
    "sorted": false
}

Note: Return the page 2, but number value is 1. 

Thanks for your attention.

philwebb commented 1 year ago

I believe that this might be by design, but you'll have to check with the Spring Data team to be sure. They have an issue tracker at https://github.com/spring-projects/spring-data-commons. Spring Boot doesn't do much more than configure a PageableHandlerMethodArgumentResolverCustomizer to run.

efimatica commented 1 year ago

Thank you for your clarifications @philwebb