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

时间:2019-10-03 18:10:50

标签: java odata olingo

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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您不使用Annotation Processor extensionJPA Processor extension,则应该实现/扩展ODataSingleProcessor。您可以从GetEntitySetUriInfo类型参数的URL中检索$ 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());

    }