如何在Spring Boot中设置最大分页大小?

如何在Spring Boot中设置最大分页大小?,spring,spring-boot,spring-hateoas,Spring,Spring Boot,Spring Hateoas,我正在开发springboot+springdatamongo+springhateoas示例。我正在使用SpringBootV2.2.2.RELEASE 我正在全局尝试将分页页面大小限制设置为200。为此,我进行了如下配置 # DATA WEB (SpringDataWebProperties) spring.data.web.pageable.default-page-size=20 # Default page size. spring.data.web.pageable.max-page

我正在开发
springboot+springdatamongo+springhateoas
示例。我正在使用SpringBoot
V2.2.2.RELEASE

我正在全局尝试将分页页面大小限制设置为200。为此,我进行了如下配置

# 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.
若客户端发送的页面大小超过200,那个么我需要显示用户友好的错误消息

@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;
    }
}
代码:

@GetMapping(value=“/countries”,products={MediaType.APPLICATION_JSON})
公共响应findEmployees(@Parameter(hidden=true)可分页可分页){
Page Page=EmployeeService.findAllEmployees(第页参数,可分页);
PagedModel model=pagedAssembler.toModel(第页,EmployeeAssembler);
返回新的响应状态(型号,HttpStatus.OK);
}

我使用下面的代码解决了这个问题

@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);
    }
}
@配置
公共类WebConfig实现WebMVCConfiguer{
@凌驾
公共无效AddArgumentResolver(列表解析程序){
PageableHandlerMethodArgumentResolver解析器=新的PageableHandlerMethodArgumentResolver(){
@凌驾
公共分页可解析参数(MethodParameter、MethodParameter、,
@可为空的ModelAndViewContainer mavContainer,NativeWebRequest webRequest,
@可为空的WebDataBinderFactory binderFactory){
Pageable p=super.resolveArgument(methodParameter、mavContainer、webRequest、binderFactory);
if(p.getPageSize()>Integer.parseInt(500)){
抛出新的MandatoryResourceException(“错误”),env.getProperty(“500”);
}
返回p;
}
};
解析程序。添加(解析程序);
webmvcconfiguer.super.addArgumentResolver(解析器);
}
}

错误不是来自设置最大页面大小,而是来自自动连接PagedResourcesAssembler,而不将该类注册为bean。也许这有助于:
@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);
}
@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);
    }
}