in shenyu-admin/src/main/java/org/apache/shenyu/admin/service/manager/impl/SwaggerDocParser.java [175:229]
protected void buildRequestParameterList(final DocItem docItem, final JsonObject docInfo,
final JsonObject docRoot) {
Optional<JsonArray> parametersOptional = Optional.ofNullable(docInfo.getAsJsonArray("parameters"));
JsonArray parameters = parametersOptional.orElse(new JsonArray());
List<DocParameter> docRequestParameterList = new ArrayList<>();
List<DocParameter> docHeaderParameterList = new ArrayList<>();
for (int i = 0; i < parameters.size(); i++) {
JsonObject fieldJson = parameters.get(i).getAsJsonObject();
JsonObject schema = fieldJson.getAsJsonObject("schema");
if (Objects.nonNull(schema)) {
RefInfo refInfo = getRefInfo(schema);
if (Objects.nonNull(refInfo)) {
List<DocParameter> parameterList = this.buildDocParameters(refInfo.ref, docRoot, true);
docRequestParameterList.addAll(parameterList);
}
} else {
DocParameter docParameter = GsonUtils.getInstance().fromJson(fieldJson, DocParameter.class);
JsonElement inElement = fieldJson.get("in");
if (Objects.nonNull(inElement) && "header".equals(inElement.getAsString())) {
docHeaderParameterList.add(docParameter);
} else {
docRequestParameterList.add(docParameter);
}
}
}
Map<String, List<DocParameter>> collect = docRequestParameterList.stream()
.filter(docParameter -> docParameter.getName().contains("."))
.map(docParameter -> {
String name = docParameter.getName();
int index = name.indexOf('.');
String module = name.substring(0, index);
String newName = name.substring(index + 1);
DocParameter ret = DocParameter.copy(docParameter);
ret.setName(newName);
ret.setModule(module);
return ret;
})
.collect(Collectors.groupingBy(DocParameter::getModule));
collect.forEach((key, value) -> {
DocParameter moduleDoc = new DocParameter();
moduleDoc.setName(key);
moduleDoc.setType("object");
moduleDoc.setRefs(value);
docRequestParameterList.add(moduleDoc);
});
List<DocParameter> requestParameterList = docRequestParameterList.stream()
.filter(docParameter -> !docParameter.getName().contains("."))
.collect(Collectors.toList());
docItem.setRequestParameters(requestParameterList);
docItem.setRequestHeaders(docHeaderParameterList);
}