Java 弹簧靴分页

Java 弹簧靴分页,java,spring-boot,pagination,Java,Spring Boot,Pagination,我面临分页数据的问题。页面数据是使用外部数组dxprecommundationresponses计算的,在我想要的位置,它应该通过嵌套数组建议来计算。我在结果部分提到了响应数据 我试图更改页面数据计算,但它是使用我们传入的PageImpl()构造函数中的数据进行计算的 我使用这种方法对我们从第三方API获取的数据进行分页 但是它是使用dxprecommandationslist计算的 #This is the code through I need to generate the respons

我面临分页数据的问题。页面数据是使用外部数组
dxprecommundationresponses
计算的,在我想要的位置,它应该通过嵌套数组
建议来计算。我在结果部分提到了响应数据

我试图更改页面数据计算,但它是使用我们传入的
PageImpl()
构造函数中的数据进行计算的

我使用这种方法对我们从第三方API获取的数据进行分页

但是它是使用
dxprecommandationslist
计算的

#This is the code through I need to generate the response
List<DXPRecommendationResponse> dxpRecommendationslist = new ArrayList<>();

List<DXPActivity> dxpActivities = getThirdResponse(pageable, correlationId,
dxpRecommendationslist, reservationGuestId, reservationId, nbxRecommendationRequest);

return new PageImpl<>(dxpRecommendationslist, pageable, dxpActivities.size());

#This method is used to get data from third party
public List<DXPActivity> getThirdResponse(final Pageable pageable, final String correlationId,
        List<DXPRecommendationResponse> list, String reservationGuestId, String reservationId,
        NBXRecommendationRequest nbxRecommendationRequest) {

    List<DXPActivity> dxpActivities = new ArrayList<>();

    NBXRecommendationResponse nbxRecommendationResponse = vVNBXRecommendationService
            .getCalendarRecommendation(nbxRecommendationRequest, correlationId);

    if (nbxRecommendationResponse != null) {

        DXPRecommendationResponse dxpRecommendationResponse = new DXPRecommendationResponse();
        dxpRecommendationResponse.setReservationGuestId(reservationGuestId);
        dxpRecommendationResponse.setReservationNumber(reservationId);
        dxpRecommendationResponse.setRecommendationType("CalendarType");
        dxpRecommendationResponse.setDateTime(new Date());

        populateActivities(dxpActivities, nbxRecommendationResponse);
        List<DXPActivity> filteredList;
        if (!CollectionUtils.isEmpty(dxpActivities)
                && dxpActivities.size() >= (pageable.getPageSize() * pageable.getPageNumber())) {

            filteredList = Lists.partition(dxpActivities, pageable.getPageSize()).get(pageable.getPageNumber());
        } else {

            filteredList = new ArrayList<DXPActivity>();
        }
        dxpRecommendationResponse.setRecommendations(filteredList);
        list.add(dxpRecommendationResponse);
    }

    return dxpActivities;
}
#This method is used to populate data
private void populateActivities(List<DXPActivity> dxpActivities,
        NBXRecommendationResponse nbxRecommendationResponse) {

    for (Activity activity :nbxRecommendationResponse.getCalendarRecommendation().getRecommendations().getActivities()) {

        DXPActivity dxpActivity = new DXPActivity();
        orikaMapper.map(activity, dxpActivity);
        dxpActivities.add(dxpActivity);
    }
}

这里的问题是如何实现
PageImpl
,以及如何在这里计算得到的总数。以下代码取自构造函数:

this.total = pageable.toOptional().filter(it -> !content.isEmpty())//
        .filter(it -> it.getOffset() + it.getPageSize() > total)//
        .map(it -> it.getOffset() + content.size())//
        .orElse(total);
这里的重要一行是第二行,如文档注释中所述,它是针对不一致性的保险。它检查您是否在最后一页,如果在最后一页,它将使用第三行来计算结果
总计
。因此,完全忽略您给出的
total
。如果您想重写此行为,您应该实现您的
页面
,该页面只使用给定的
总数

但是,我认为它在语义上是不正确的。您正在混合可能不应该混合的内容(一种类型的页面对象,但实际的分页是在另一种类型上完成的)。作为pageable给出的列表总是有一个元素,而您正在分页子元素,这似乎不正确,甚至需要对子元素进行分页吗


一种可能的解决方案是通过直接在
dxprecommundationresponse
中指定
Page recommendations
成员并返回不可分页的
dxprecommundationresponse
,使子元素仅可分页。但同样,这似乎有点不对劲。它实际上取决于您试图在这里构建什么以及背后的逻辑。

这里的问题是
PageImpl的实现以及如何在这里计算得到的总数。以下代码取自构造函数:

this.total = pageable.toOptional().filter(it -> !content.isEmpty())//
        .filter(it -> it.getOffset() + it.getPageSize() > total)//
        .map(it -> it.getOffset() + content.size())//
        .orElse(total);
这里的重要一行是第二行,如文档注释中所述,它是针对不一致性的保险。它检查您是否在最后一页,如果在最后一页,它将使用第三行来计算结果
总计
。因此,完全忽略您给出的
total
。如果您想重写此行为,您应该实现您的
页面
,该页面只使用给定的
总数

但是,我认为它在语义上是不正确的。您正在混合可能不应该混合的内容(一种类型的页面对象,但实际的分页是在另一种类型上完成的)。作为pageable给出的列表总是有一个元素,而您正在分页子元素,这似乎不正确,甚至需要对子元素进行分页吗

一种可能的解决方案是通过直接在
dxprecommundationresponse
中指定
Page recommendations
成员并返回不可分页的
dxprecommundationresponse
,使子元素仅可分页。但同样,这似乎有点不对劲。这实际上取决于你在这里试图构建什么,以及背后的逻辑