如何使用 Apache Olingo V2 实现分页?

How to implement pagination with Apache Olingo V2?

我需要使用 Apache Olingo V2 来实现 API 使用分页。这意味着我需要 为支持基本 $top 和 $skip 运算符的实体集合提供一个简单的 URL, 就像下面的例子一样:

https://services.odata.org/OData/OData.svc/Products?$top=5&$skip=3

我没有使用注释处理器扩展或 JPA 处理器扩展,所以它们是 不是实现此分页的选项。

我检查了 Olingo V2 Server documentation 但找不到实现分页的示例。

如果您不使用 Annotation Processor extensionJPA Processor extension,您将使用 implemented/extended ODataSingleProcessor。您可以从 URL from GetEntitySetUriInfo 类型参数中检索 $skip 和 $top 值,并相应地利用它来获取数据。

下面是相同的示例代码,您可能想要进行空值检查和其他敏感化。

@Override
public ODataResponse readEntitySet(GetEntitySetUriInfo uriInfo, String contentType) throws ODataException {

        int skipValue = uriInfo.getSkip();
        int topValue = uriInfo.getTop();

        URI serviceRoot = getContext().getPathInfo().getServiceRoot();
        ODataEntityProviderPropertiesBuilder propertiesBuilder = EntityProviderWriteProperties
                .serviceRoot(serviceRoot);

        List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

        // fetch data from the datasource considering the skip and top values 
        // one example could be SELECT * FROM table LIMIT topValue OFFSET skipValue
        // fill in the data variable

        return EntityProvider.writeFeed(contentType, uriInfo.getStartEntitySet(), data, propertiesBuilder.build());

    }