2017-10-14 53 views
1

我試圖使用招搖解析器來解析和檢索在「swagger.json」信息字段(io.swagger.parser.SwaggerParser;)

下面是一個「swagger.json」的摘錄。 我試圖檢索「$ ref」:「#/ definitions/abc」。

"responses" : { 
     "200" : { 
     "description" : "abc", 
     "schema" : { 
      "$ref" : "#/definitions/abc" 
     } 
     }, 

這是解析它的代碼。

SwaggerParser sparse = new SwaggerParser(); 
    Swagger swagger = sparse.read("swagger.json"); 

//下一行是我遇到的問題。 swigger.getPath(「/ endpointurl」)。getGet()。getResponses()。get(「200」)。getSchema();

此時,上面一行中的「.getSchema()」只有「getType()」可以調用。它沒有「get $ ref()」。這是因爲「.getSchema()」返回一個「Property」(io.swagger.models.properties.Property)。它沒有「get $ ref()」。

得到$ REF()是在 「RefProperty」(io.swagger.models.properties.RefProperty)

但 「.getSchema()」 不返回 「RefProperty」 可用。將「.getSchema()」的結果轉換爲「RefProperty」也是行不通的。它以這個錯誤結束。 java.lang.ClassCastException:io.swagger.models.properties.ArrayProperty不能轉換到io.swagger.models.properties.RefProperty

有任何人試圖解析「swagger.json」,並能檢索「 $ ref「:在」響應「塊中的」模式「下的行?

任何想法我怎麼能夠做到這一點?

回答

0

我想出了一個方法來做到這一點。也許不是最好的辦法,但它會檢索「#ref」中的信息。

 Object obj = xxxxx.getSchema(); // xxxxx is whatever your code that gives you ".getSchema()". Mine is in a map and I don't want to distract people. 

     ArrayProperty arrProp = new ArrayProperty(); 

     arrProp = (ArrayProperty)obj; // .getSchema() returns an ArrayProperty 

     RefProperty refProperty = (RefProperty) arrProp.getItems(); // .getItems() will return the RefProperty type you need to call ".get$ref()". 
     String refStr = refProperty.get$ref(); // Voila, there's your content in "#ref". 
     String simpleRefStr = refProperty.getSimpleRef(); 

我不得不做一些類型的鑄件。如果你有一個更優雅的方式來做到這一點,請張貼在這裏。