How to configure Spring boot pagination starting from page 1, not 0

前端 未结 4 1571
别那么骄傲
别那么骄傲 2021-02-04 03:01

boot(1.4.0) \"Pageable\" for pagination.It works fine without any issue.But by default the page value starts from \"0\" but in the front-end the page value starts from \"1\". So

相关标签:
4条回答
  • 2021-02-04 03:53

    Spring added this future as well. Just make oneIndexed parameter equals to true in your configuration file and pagination will start from page 1.By default its false and pagination starts from 0.

    spring.data.web.pageable.one-indexed-parameters=true
    
    0 讨论(0)
  • 2021-02-04 04:03

    Spring Boot will be using Spring Data under the covers.

    The Spring Data class you need to configure is the following:

    org.springframework.data.web.PageableHandlerMethodArgumentResolver

    and in particular the following method:

    http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/web/PageableHandlerMethodArgumentResolver.html#setOneIndexedParameters-boolean-

    This will allow you to use you current UI paging as is i.e. with first page = 1.

    In a Boot application I think the config may look something like:

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
            resolver.setOneIndexedParameters(true);
            argumentResolvers.add(resolver);
            super.addArgumentResolvers(argumentResolvers);
        }
    }
    
    0 讨论(0)
  • 2021-02-04 04:04

    If you are using Spring Boot 2.X you could switch from WebMvcConfigurerAdapter to application properties. There is a set of properties to configure pageable:

    # DATA WEB (SpringDataWebProperties)
    spring.data.web.pageable.default-page-size=20 # Default page size.
    spring.data.web.pageable.max-page-size=2000 # Maximum page size to be accepted.
    spring.data.web.pageable.one-indexed-parameters=false # Whether to expose and assume 1-based page number indexes.
    spring.data.web.pageable.page-parameter=page # Page index parameter name.
    spring.data.web.pageable.prefix= # General prefix to be prepended to the page number and page size parameters.
    spring.data.web.pageable.qualifier-delimiter=_ # Delimiter to be used between the qualifier and the actual page number and size properties.
    spring.data.web.pageable.size-parameter=size # Page size parameter name.
    spring.data.web.sort.sort-parameter=sort # Sort parameter name.
    

    But please remember that even if you change the one-indexed-parameter the page response (PageImpl class) will return results with zero-based page number. It could be a little misleading.

    0 讨论(0)
  • 2021-02-04 04:07

    To get better result, you need to extend RepositoryRestMvcConfiguration, like below

    @Configuration
       public class RespositoryConfiguration extends RepositoryRestMvcConfiguration {
    
        @Override
        @Bean
        public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
    
            HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver();
            resolver.setOneIndexedParameters(true);
            return resolver;
        }
    }
    

    Then you shall get all the links and pagination information correct except 'number', which is one less. See the result for page=1,

      "_links": {
        "first": {
          "href": "http://localhost:8080/user/user?page=1&size=5"
        },
        "self": {
          "href": "http://localhost:8080/user/user"
        },
        "next": {
          "href": "http://localhost:8080/user/user?page=2&size=5"
        },
        "last": {
          "href": "http://localhost:8080/user/user?page=2&size=5"
        }
      },
      "page": {
        "size": 5,
        "totalElements": 6,
        "totalPages": 2,
        "number": 0
      }
    
    0 讨论(0)
提交回复
热议问题