我需要使用Apache Olingo V2来使用分页实现API。这意味着我需要 为支持基本$ top和$ skip运算符的实体的集合提供简单的URL, 就像下面的示例一样:
https://services.odata.org/OData/OData.svc/Products?$ top = 5&$ skip = 3
我没有使用注释处理器扩展或JPA处理器扩展,所以它们是 不是实现此分页的一种选择。
我检查了Olingo V2 Server documentation,但是找不到实现分页的示例。
答案 0 :(得分:0)
如果您不使用Annotation Processor extension
或JPA 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());
}