我正在尝试使用swagger解析器来解析和检索" 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&#34)。。。getGet()getResponses()得到(" 200&#34)。的getSchema();
此时," .getSchema()"在上面的行中只有" getType()"我可以打电话。它没有"得到$ ref()"。这是因为" .getSchema()"返回"属性" (io.swagger.models.properties.Property)。它没有"得到$ ref()"。
获取$ ref()可在" RefProperty" (io.swagger.models.properties.RefProperty)
但" .getSchema()"不会返回" RefProperty"。 Typecast" .getSchema()"的结果到" RefProperty"也没有用。它最终出现在这个错误中。 java.lang.ClassCastException:io.swagger.models.properties.ArrayProperty无法强制转换为io.swagger.models.properties.RefProperty
是否有人试过解析" swagger.json"并且能够在" schema"下检索" $ ref":行。在"响应"方框?
知道我怎么能这样做?
答案 0 :(得分: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();
我不得不做几种类型的铸件。如果您有更优雅的方式,请在此处发布。