Как извлечь данные из нескольких вложенных расширений из ODATA с помощью OLINGO? - PullRequest
0 голосов
/ 09 января 2019

У меня проблема с выяснением того, как я могу извлечь данные, которые я получаю из URI, который я создал из Apache olingo. Извлечение данных из $ 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 голосов
/ 10 января 2019

Я наконец понял:

 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, после этого я поместил его в итератор и начал получать данные.

...