如何使用OLINGO从ODATA的多个嵌套扩展中提取数据?

时间:2019-01-09 19:18:04

标签: java apache nested odata olingo

在解决如何从apache olingo构建的uri中提取数据时,我遇到了问题。从$ expand提取数据使用此语法。

uri:odata / PropertyOrigin?$ expand = Property1($ select = Field1); $ expand = Property2($ select = Field1ofProperty2))

/* JSON -> 
PropertyOrigin -> 
Field1Origin,
Field2Origin,   
NavigationProperty1 -> 
Field1,
Field2,
Field3,
NavigationProperty2 ->
NavigationField1ofProperty2 <- the one I am trying to extract */

ClientEntity ce = csi.next();
String ExtractData1 = ce.getProperty("Property1").getComplexValue().get("Field1").getValue().toString();

但是,当我尝试从第二个$ expand获取数据时,我得到了一个对象空引用,因为它没有达到我要与之交互的正确属性。

ClientEntity ce = csi.next();
String ExtractData2 = ce.getProperty("NavigationProperty1").getComplexValue().get("NavigationProperty2").getComplexValue().get("Field1ofNavigationProperty2").getValue().toString();

注意: NavigationProperty2是一个集合

1 个答案:

答案 0 :(得分:0)

我终于知道了:

 ClientEntity ce = csi.next();
 ClientCollectionValue<ClientValue> ccv = ce.getProperty("NavigationProperty1")
                                 .getComplexValue()
                                 .get("NavigationProperty2")
                                 .getCollectionValue();

 Iterator<ClientValue> ite = ccv.iterator();
 ClientValue cv = ite.next();
 String extractData3 = cer.asComplex().get("Field1ofNavigationProperty2").getValue().toString();

说明:由于NavigationProperty2是一个集合,因此我认为必须使用getcollectionvalue而不是使用getvalue或getcomplexvalue,然后将其放置在迭代器上,然后开始获取数据。