首页 > 解决方案 > Spring Boot Pagination 不适用于自定义 DTO 列表

问题描述

我坚持在 Spring Boot 项目中集成分页。

服务实现类

@Override
public Page<OnlineBuyProductReportItemDTO> generateOnlineBuyProductReport(String fromDate, String toDate, int pageNum, String sortField, String sortDir) {
    Pageable pageable = PageRequest.of(pageNum - 1, 10, 
            sortDir.equals("asc") ? Sort.by(sortField).ascending()
                                  : Sort.by(sortField).descending()
    );
    List<PurchaseOrder> purchaseOrderList = purchaseOrderRepository.searchPurchaseOrdersForOnlineBuyProductReport(
            DateUtil.convertToDate(fromDate), DateUtil.convertToDate(toDate));

    OnlineBuyProductReportItemDTO item = null;
    List<OnlineBuyProductReportItemDTO> itemList = new ArrayList<OnlineBuyProductReportItemDTO>();
    if(purchaseOrderList != null && purchaseOrderList.size() > 0) {
        for (PurchaseOrder purchaseOrder : purchaseOrderList) {
            
            item = new OnlineBuyProductReportItemDTO();
            item.setOrderNumber(purchaseOrder.getOrderNumber());
            item.setCreatedDate(DateUtil.convertDatetoStringSwissDate(purchaseOrder.getCreationTime()));
            
            Address address = addressRepository.getAddressById(purchaseOrder.getBillingAddressId());
            item.setCustomerName(address.getFullName());
            item.setContactNumber(address.getTelephone());
            
            List<OrderCart> orderCartList = orderCartRepository.getOrderCartByPurchaseOrderId(purchaseOrder.getId());
            List<String> buyProductNameList = new ArrayList<String>();
            if(orderCartList != null && orderCartList.size() > 0) {
                
                for (OrderCart orderCart : orderCartList) {
                    buyProductNameList.add(orderCart.getProductName());
                }
            }
            item.setProductName(buyProductNameList);
            item.setPrice(purchaseOrder.getTotalPrice());
            item.setStatus(purchaseOrder.getDeliveryStatus().getName());
            itemList.add(item);
        }
    }
    
    return new PageImpl<OnlineBuyProductReportItemDTO>(itemList, pageable,itemList.size());
    
}

在这里,我从 3 个数据库表中获取数据,并在数据处理后将这些数据添加到 DTO 列表中。

但是,与前端集成后,会显示分页选项,但没有按预期工作。包含相同数据集和排序选项的所有页面均未按预期工作。

似乎这个可分页部分不适用于数据处理。

Pageable pageable = PageRequest.of(pageNum - 1, 10, 
            sortDir.equals("asc") ? Sort.by(sortField).ascending()
                                  : Sort.by(sortField).descending()
    );

有什么办法可以做到这一点

标签: springspring-bootspring-data-jpapaginationpageable

解决方案


推荐阅读