Reputation: 21
using org.springframework.data.domain.Pageable
.
I want to start paging number with 1.
I saw same post and did, but they doesn't work in my app.
Get spring boot pagination number starts from 1 instead of 0
Spring Data Rest - Configure pagination
build.gradle
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.data:spring-data-rest-webmvc'
}
config
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
import org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer;
import org.springframework.stereotype.Component;
@Component
public class CustomConfig implements PageableHandlerMethodArgumentResolverCustomizer {
@Override
public void customize(PageableHandlerMethodArgumentResolver pr) {
pr.setOneIndexedParameters(true);
}
}
controller
@GetMapping("/")
public Integer index(Pageable pageable) {
return pageable.getPageNumber();
}
result
% curl 'localhost:8080/'
0
% curl 'localhost:8080/?page=1'
0
% curl 'localhost:8080/?page=2'
1
I want to do
% curl 'localhost:8080/'
1
% curl 'localhost:8080/?page=1'
1
% curl 'localhost:8080/?page=2'
2
Upvotes: 2
Views: 3251
Reputation: 851
FYI, you need to change this:
@GetMapping("/")
public Integer index(Pageable pageable) {
return pageable.getPageNumber();
}
To this:
@GetMapping("/")
public Integer index(
@RequestParam(value = "page", required = false, defaultValue = "0") int page,
@RequestParam(value = "size", required = false, defaultValue = "10") int size,
@PageableDefault(value = 10, page = 0) Pageable pageable) {
return pageable.getPageNumber();
}
You need to have those GET parameters in your request so that Spring can coerce them into the Pageable object, and you can define them in this way, choose names for them, etc...
Since this process of coercion/binding is what the spring.data.web.pageable.one-indexed-parameters property works on, this is how the request needs to look.
Upvotes: 0
Reputation: 15878
Try configuring with WebMvcConfigurerAdapter
like below way instead of directly implementing PageableHandlerMethodArgumentResolverCustomizer
.
@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);
}
}
If you are using Spring Boot 2.X you could switch from WebMvcConfigurerAdapter
to application properties like below:
# 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=true # 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.
Upvotes: 2