0

I'm developing Spring Boot + Spring Data Mongo + Spring HATEOAS example. I'm using Spring Boot V2.2.2.RELEASE.

I'm globally trying to set the Pagination PageSize limit to 200. For that I went through spring data jpa limit pagesize, how to set to maxSize and configurations 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=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.

If Client sends more than 200 PageSize, then I need to show user friendly error message.

@Configuration
public class PaginationConfig extends SpringDataWebConfiguration{

    public PaginationConfig(ApplicationContext context, ObjectFactory<ConversionService> conversionService) {
        super(context, conversionService);
    }

    @Bean
    public PageableHandlerMethodArgumentResolver pageableResolver() {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(sortResolver());
        resolver.setMaxPageSize(1000);
        return resolver;
    }
}

I used above configurations, but getting below error.

2020-02-06 21:08:31.963 ERROR [Reference Data,,,] 22812 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Field pagedAssembler in com.example.EmployeeController required a bean of type 'org.springframework.data.web.PagedResourcesAssembler' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.data.web.PagedResourcesAssembler' in your configuration.

Code:

@GetMapping(value = "/countries", produces = { MediaType.APPLICATION_JSON })
public ResponseEntity<PagedModel<EmployeeModel>> findEmployees(@Parameter(hidden=true) Pageable pageable) {
    Page<EmployeeDto> page = EmployeeService.findAllEmployees(page_params, pageable);
    PagedModel<EmployeeModel> model = pagedAssembler.toModel(page, EmployeeAssembler);
    return new ResponseEntity<>(model, HttpStatus.OK);
}
PAA
  • 1
  • 46
  • 174
  • 282
  • The error doesn't come from setting max-page-size, but from autowiring a PagedResourcesAssembler without registering that class as a bean. Maybe this helps: https://stackoverflow.com/questions/21346387/how-to-correctly-use-pagedresourcesassembler-from-spring-data – Dario Seidl Feb 06 '20 at 15:52

1 Answers1

0

I was able to solve the issue using below code.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver() {

            @Override
            public Pageable resolveArgument(MethodParameter methodParameter,
                    @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
                    @Nullable WebDataBinderFactory binderFactory) {
                Pageable p = super.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);

                if(p.getPageSize() > Integer.parseInt(500)) {
                    throw new MandatoryResourceException("Error"), env.getProperty("500"));
                }

                return p;
            }
        };

        resolvers.add(resolver);
        WebMvcConfigurer.super.addArgumentResolvers(resolvers);
    }
}
PAA
  • 1
  • 46
  • 174
  • 282