diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerProvider.java b/magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerProvider.java index 62d1c8f8..2da26fd9 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerProvider.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerProvider.java @@ -78,7 +78,7 @@ public class SwaggerProvider { hasBody = parameters.stream().anyMatch(it -> VAR_NAME_REQUEST_BODY.equals(it.getIn())); BaseDefinition baseDefinition = info.getRequestBodyDefinition(); if (hasBody && baseDefinition != null) { - doProcessDefinition(baseDefinition, info, StringUtils.defaultIfBlank(baseDefinition.getName(), VAR_NAME_REQUEST_BODY), "request"); + doProcessDefinition(baseDefinition, info, "root_" + baseDefinition.getName() , "request", 0); } baseDefinition = info.getResponseBodyDefinition(); parameters.forEach(path::addParameter); @@ -86,7 +86,7 @@ public class SwaggerProvider { Map responseMap = parseResponse(info); if (!responseMap.isEmpty()) { path.setResponses(responseMap); - doProcessDefinition(baseDefinition, info, StringUtils.defaultIfBlank(baseDefinition.getName(), "responseData"), "response"); + doProcessDefinition(baseDefinition, info, "root_" + baseDefinition.getName(), "response", 0); } }else{ path.addResponse("200", mapper.readValue(Objects.toString(info.getResponseBody(), BODY_EMPTY), Object.class)); @@ -138,9 +138,9 @@ public class SwaggerProvider { String groupName = groupServiceProvider.getFullName(info.getGroupId()).replace("/", "-"); String voName = groupName + "«" + info.getPath().replaceFirst("/", "").replaceAll("/", "_") + "«request«"; if (VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY.equalsIgnoreCase(baseDefinition.getDataType().getJavascriptType())) { - voName += StringUtils.defaultIfBlank(baseDefinition.getChildren().get(0).getName(), VAR_NAME_REQUEST_BODY + "_" + StringUtils.defaultIfBlank(baseDefinition.getName(), VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY)) + "»»»"; + voName += "root_" + (StringUtils.isNotBlank(baseDefinition.getChildren().get(0).getName()) ? "_" + baseDefinition.getChildren().get(0).getName() : "") + "»»»"; } else { - voName += StringUtils.defaultIfBlank(baseDefinition.getName(), VAR_NAME_REQUEST_BODY) + "»»»"; + voName += "root_" + baseDefinition.getName() + "»»»"; } schema.put("originalRef", voName); @@ -166,7 +166,7 @@ public class SwaggerProvider { if (baseDefinition.getChildren().size() > 0) { String groupName = groupServiceProvider.getFullName(info.getGroupId()).replace("/", "-"); String voName = groupName + "«" + info.getPath().replaceFirst("/", "").replaceAll("/", "_") + "«response«"; - voName += StringUtils.defaultIfBlank(baseDefinition.getName(), "responseData") + "»»»"; + voName += "root_" + baseDefinition.getName() + "»»»"; Map schema = new HashMap<>(2); schema.put("originalRef", voName); @@ -180,35 +180,38 @@ public class SwaggerProvider { return result; } - private Map doProcessDefinition(BaseDefinition target, ApiInfo info, String parentName, String definitionType) { - Map result = new HashMap<>(4); + private Map doProcessDefinition(BaseDefinition target, ApiInfo info, String parentName, String definitionType, int level) { + Map result = new HashMap<>(3); result.put("description", target.getDescription()); if (VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY.equalsIgnoreCase(target.getDataType().getJavascriptType())) { if (target.getChildren().size() > 0) { - result.put("items", doProcessDefinition(target.getChildren().get(0), info, parentName + "_" + StringUtils.defaultIfBlank(target.getName(), VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY), definitionType)); + result.put("items", doProcessDefinition(target.getChildren().get(0), info, parentName + target.getName() + "_", definitionType, level + 1)); } else { result.put("items", Collections.emptyList()); } result.put("type", target.getDataType().getJavascriptType()); } else if (VAR_NAME_REQUEST_BODY_VALUE_TYPE_OBJECT.equalsIgnoreCase(target.getDataType().getJavascriptType())) { String groupName = groupServiceProvider.getFullName(info.getGroupId()).replace("/", "-"); - String voName = groupName + "«" + info.getPath().replaceFirst("/", "").replaceAll("/", "_") + (StringUtils.equals("response", definitionType) ? "«response«" : "«request«") + StringUtils.defaultIfBlank(target.getName(), parentName) + "»»»"; + String voName = groupName + "«" + info.getPath().replaceFirst("/", "").replaceAll("/", "_") + (StringUtils.equals("response", definitionType) ? "«response«" : "«request«") + parentName + target.getName() + "»»»"; + + Map definition = new HashMap<>(3); + Map> properties = new HashMap<>(target.getChildren().size()); + for (BaseDefinition obj : target.getChildren()) { + properties.put(obj.getName(), doProcessDefinition(obj, info, parentName + target.getName() + "_", definitionType, level + 1)); + } + definition.put("properties", properties); + definition.put("description", target.getDescription()); + definition.put("type", target.getDataType().getJavascriptType()); + if (this.DEFINITION_MAP.containsKey(voName)) { // TODO 应该不会出现名字都一样的 - voName.replace("»»»", "_" + parentName + "»»»"); + voName = voName.replace("»»»", "_" + level + "»»»"); } + + this.DEFINITION_MAP.put(voName, definition); result.put("originalRef", voName); result.put("$ref", DEFINITION + voName); - Map definition = new HashMap<>(4); - Map> properties = new HashMap<>(target.getChildren().size()); - for (BaseDefinition obj : target.getChildren()) { - properties.put(obj.getName(), doProcessDefinition(obj, info, parentName, definitionType)); - } - definition.put("properties", properties); - definition.put("description", target.getDescription()); - definition.put("type", target.getDataType().getJavascriptType()); - this.DEFINITION_MAP.put(voName, definition); } else { result.put("example", target.getValue()); result.put("type", target.getDataType().getJavascriptType());