我需要从Java使用OData4服务,并根据OData website上的框架列表,Olingo或SDL Odata Framework这两个选项。我的问题是,这两个项目的文档都专注于编写一个不消费的服务。 Olingo网站链接到2014年的博客文章,该文章与当前版本不兼容API,我无法在SDL github页面上找到任何内容。
如果有人可以通过使用适当的POJO对象模型向我提供一个简单的POST / GET示例,那就很棒。
我有限的理解是OData将有关实际对象模型的任何信息从编译时移动到客户端上的运行时。我很乐意忽略这一点并针对固定对象模型进行编码,因为我们使用的服务不会发生变化。
答案 0 :(得分:8)
Olingo似乎忽略了客户端API的文档。 但是样本/客户端的GIT repository中有一个例子。
基本上对于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());
}
查看Olingo代码库中的示例以获取更多详细信息 检索元数据,处理所有属性等。
要执行POST,您可以执行以下操作。 (注意,这不是经过测试的代码,示例Car服务是只读的。) 首先,您将数据构建为ClientEntity。你这样做与
ClientComplexValue manufacturer = of.newComplexValue("Manufacturer");
manufacturer.add(of.newPrimitiveProperty("Name", of.newPrimitiveValueBuilder().buildString("Ford")));
然后发送POST请求
ODataEntityCreateRequest<ClientEntity> request = client.getCUDRequestFactory().getEntityCreateRequest(absoluteUri, manufacturer);
ODataEntityCreateResponse<ClientEntity> response = request.execute();
所以这不适用于POJO类 - 结果类型是ClientEntity,它将数据显示为名称/值映射。 关于该特定主题的问题还有另一个未解决的问题 Olingo - Create strongly typed POJOs for client library of OData service 我建议我们转而关注这一点。
答案 1 :(得分:0)
对于SDL OData framework,您可以查看Github Test class有关如何使用OData客户端的信息。
SDL OData框架基于EDM类,一个简单的例子可以让所有产品(Product Edm Entity)看起来像
// Create and configure the client
DefaultODataClient client = new DefaultODataClient();
client.configure(componentsProvider);
//Build the query
ODataClientQuery query = new BasicODataClientQuery.Builder().withEntityType(Product.class).build();
//Execute the query
List<Object> entities = (List<Object>) client.getEntities(requestProperties, query);