Spring分页:参数映射和页面结果问题

时间:2018-07-20 09:49:31

标签: spring-boot pagination spring-data

我想使用Spring工具来实现我的分页。我目前没有基础数据库,想从页面中提供的虚拟列表中提供请求。 REST控制器中的请求如下所示:

@Override
@ResponseStatus(HttpStatus.OK)
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public Page<ComponentDto> getComponents(@RequestParam("searchTerm") Optional<String> searchTerm, Pageable pageRequest) {
    return componentService.getComponents(searchTerm, pageRequest);

当我卷曲或用招摇的方式发送请求时,始终使用分页的默认值,而不是给定的请求参数的大小,页面和排序等。 请求网址如下:

http://localhost:8090/zoo-service/v1/components?pageNumber=2&pageSize=2

是否需要进行自动完成映射?另一个问题是,如果我对页面和大小使用两个int参数,并使用静态PageRequest调用向我的服务提供Pageable。评估和页面创建如下:

if (searchTerm.isPresent() && StringUtils.isNoneBlank(searchTerm.get())) {
        List<ComponentDto> list  = componentMockProvider.getMockedComponents().stream().filter(it -> it.getName().contains(searchTerm.get())).collect(Collectors.toList());
        result = new PageImpl<ComponentDto>(list, pageRequest, list.size());
    }
    else{
        result = new PageImpl<ComponentDto>(componentMockProvider.getMockedComponents(), pageRequest, componentMockProvider.getMockedComponents().size());
    }
    return result;

页面始终提供完整的内容列表,但分页信息正确。所以我的列表包含6个元素,我想要第二页,页面大小为3,该页面知道此信息,但所传递的内容仍然是包含6个元素的完整列表。

希望您能得到我所要解决的问题!

1 个答案:

答案 0 :(得分:0)

我弄清楚了如何处理分页。对于第一个问题,我只有一个大胆的问题,它提供了pageSize和pageNumber作为参数。这是Pageable无法解决参数的第一个问题。对于第二个问题,我确实要自己执行内容的计算,并将计算出的列表作为内容传递给PageImpl构造函数。