分页大小超出预期时,Spring Boot v2.2.2.RELEASE引发错误

问题描述 投票:0回答:1

我正在使用Spring Boot(v2.2.2.RELEASE)+ Spring Data Mongo + Spring REST + Spring HATEOAS示例。在此示例中,如果消费者发送的分页max-page-size = 200大于200,那么我将需要显示错误消息,说最大允许大小为200。

[我经历了许多类似spring.data.rest.max-page-size does not seem to work?的链接,但没有一个解决方案对我有用。

我正在使用HATEOAS实现,并使用PagedResourcesAssembler和RepresentationModelAssemblerSupport。

任何指针?

@Configuration
public class RespositoryConfiguration extends RepositoryRestMvcConfiguration {
    @Value("${paging.default.pageSize}")
    private int size;

    @Value("${paging.default.page}")
    private int page;

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

    @Override
    @Bean
    public HateoasPageableHandlerMethodArgumentResolver pageableResolver() {
        HateoasPageableHandlerMethodArgumentResolver resolver = super.pageableResolver();
        resolver.setPageParameterName("page");
        resolver.setSizeParameterName("size");
        resolver.setOneIndexedParameters(false);
        resolver.setFallbackPageable(PageRequest.of(0, 25));
        resolver.setMaxPageSize(200);
        return resolver;
    }
}

注意:我还在spring.data.web.pageable.max-page-size=200文件中使用了application.properties

spring spring-boot spring-hateoas
1个回答
0
投票

我能够使用以下代码解决此问题,并且效果很好。

@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(env.getProperty("max.pagination.size"))) {
                    throw new MandatoryResourceException(env.getProperty("max.pagination.size.error.message"),
                            env.getProperty("max.pagination.size.error.code"));
                }

                return p;
            }
        };

        resolvers.add(resolver);
        WebMvcConfigurer.super.addArgumentResolvers(resolvers);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.