我需要从Java使用OData4服务,并且基于OData网站上的框架列表,两个选项是Olingo或SDL Odata Framework.我的问题是,这两个项目的文档都专注于编写一个不消费的服务.Olingo站点链接到2014年的博客文章,该博客文章与当前版本不兼容API,我在SDL github页面上找不到任何内容.
如果有人可以给我一个简单的POST/GET示例,使用一个很好的POJO对象模型.
我有限的理解是OData将有关实际对象模型的任何信息从编译时移动到客户端上的运行时.我很乐意忽略这个和针对固定对象模型的代码,因为我们使用的服务不会改变.
小智 8
Olingo似乎忽略了客户端API的文档.但是样本/客户端的GIT存储库中有一个例子.
基本上对于GET,您可以执行以下操作:
String serviceUrl = "http://localhost:9080/odata-server-sample/cars.svc"
String entitySetName = "Manufacturers";
ODataClient client = ODataClientFactory.getClient();
URI absoluteUri = client.newURIBuilder(serviceUri).appendEntitySetSegment(entitySetName).build();
ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request =
client.getRetrieveRequestFactory().getEntitySetIteratorRequest(absoluteUri);
// odata4 sample/server limitation not handling metadata=full
request.setAccept("application/json;odata.metadata=minimal");
ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet, ClientEntity>> response = request.execute();
ClientEntitySetIterator<ClientEntitySet, ClientEntity> iterator = response.getBody();
while (iterator.hasNext()) {
ClientEntity ce = iterator.next();
System.out.println("Manufacturer name: " + ce.getProperty("Name").getPrimitiveValue());
}
Run Code Online (Sandbox Code Playgroud)
查看Olingo代码库中的示例,以获取有关如何检索元数据,处理所有属性等的更多详细信息.
要执行POST,您可以执行以下操作.(注意,这不是经过测试的代码,示例Car服务是只读的.)首先,您将数据构建为ClientEntity.你这样做
ClientComplexValue manufacturer = of.newComplexValue("Manufacturer");
manufacturer.add(of.newPrimitiveProperty("Name", of.newPrimitiveValueBuilder().buildString("Ford")));
Run Code Online (Sandbox Code Playgroud)
然后发送POST请求
ODataEntityCreateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityCreateRequest(absoluteUri, manufacturer);
ODataEntityCreateResponse<ClientEntity> response = request.execute();
Run Code Online (Sandbox Code Playgroud)
所以这不是POJO类 - 结果类型是ClientEntity,它将数据显示为名称/值映射.关于Olingo的特定主题还有另一个未解答的问题 - 为OData服务的客户端库创建强类型POJO ,我建议我们转向那里进行跟进.