2017-10-14 5 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 ("/ endpointurl"). getGet(). getResponses(). get ("200"). getSchema();

위의 줄에서 ".getSchema()"는 내가 호출 할 수있는 "getType()"만 있습니다. "get $ ref()"가 없습니다. 이것은 ".getSchema()"가 "Property"(io.swagger.models.properties.Property)를 반환하기 때문입니다. "get $ ref()"가 없습니다.

가져 오기 $ 심판은() "RefProperty"(io.swagger.models.properties.RefProperty)

그러나 ".getSchema()"는 "RefProperty"를 반환하지 않습니다에서 사용할 수 있습니다. "RefProperty"에 대한 ".getSchema()"의 결과도 변형되지 않습니다. 이 오류로 끝납니다. java.lang.ClassCastException가 : io.swagger.models.properties.ArrayProperty는 io.swagger.models.properties.RefProperty

캐스트 할 수없는

누군가가 "A"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(); 

몇 가지 유형의 주물을 사용해야했습니다. 더 좋은 방법이 있다면 여기에 게시하십시오.