2017-10-14 7 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"); 

//この次の行が私が問題を抱えています。 swagger.getPath( "/ endurl")。getGet()。getResponses()。get( "200")。getSchema();

この時点で、上記の行の ".getSchema()"には、私が呼び出すことのできる "getType()"しかありません。それは "get $ ref()"を持っていません。これは、 ".getSchema()"が "Property"(io.swagger.models.properties.Property)を返すためです。それは "get $ ref()"を持っていません。

のget $ 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 ":" response "ブロックの" schema "の下の行?

どのようにすればいいですか?

答えて

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(); 

私はいくつかの型鋳造をしなければなりませんでした。これをよりエレガントにする方法があれば、ここに投稿してください。

関連する問題