Преглед изворни кода

[!]swagger文档参数优化,fix issues https://gitee.com/ssssssss-team/magic-api/issues/I40BG2

Lianjy пре 3 година
родитељ
комит
9de94b5026

+ 24 - 4
magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerEntity.java

@@ -227,7 +227,7 @@ public class SwaggerEntity {
 
 		private List<String> consumes = new ArrayList<>();
 
-		private List<Parameter> parameters = new ArrayList<>();
+		private List<Map<String, Object>> parameters = new ArrayList<>();
 
 		private Map<String, Object> responses = new HashMap<>();
 
@@ -239,7 +239,7 @@ public class SwaggerEntity {
 			this.consumes.add(consume);
 		}
 
-		public void addParameter(Parameter parameter) {
+		public void addParameter(Map<String, Object> parameter) {
 			this.parameters.add(parameter);
 		}
 
@@ -295,11 +295,11 @@ public class SwaggerEntity {
 			this.consumes = consumes;
 		}
 
-		public List<Parameter> getParameters() {
+		public List<Map<String, Object>> getParameters() {
 			return parameters;
 		}
 
-		public void setParameters(List<Parameter> parameters) {
+		public void setParameters(List<Map<String, Object>> parameters) {
 			this.parameters = parameters;
 		}
 
@@ -320,6 +320,26 @@ public class SwaggerEntity {
 		}
 	}
 
+	public  static Map<String, Object> createParameter(boolean required, String name, String in, String type, String description, Object example) {
+		Map<String, Object> parameter =  new HashMap<>();
+		parameter.put("required", required);
+		parameter.put("name", name);
+		parameter.put("in", in);
+		parameter.put("description", description);
+
+		if ("body".equalsIgnoreCase(in)) {
+			Map<String, Object> schema = new HashMap<>();
+			schema.put("type", type);
+			schema.put("example", example);
+			parameter.put("schema", schema);
+		} else {
+			parameter.put("x-example", example);
+			parameter.put("type", type);
+		}
+		return parameter;
+	}
+
+	@Deprecated
 	public static class Parameter {
 
 		private String name;

+ 11 - 11
magic-api/src/main/java/org/ssssssss/magicapi/swagger/SwaggerProvider.java

@@ -8,7 +8,6 @@ import org.ssssssss.magicapi.model.ApiInfo;
 import org.ssssssss.magicapi.model.BaseDefinition;
 import org.ssssssss.magicapi.model.Path;
 import org.ssssssss.magicapi.provider.GroupServiceProvider;
-import org.ssssssss.magicapi.utils.JsonUtils;
 import org.ssssssss.script.parsing.ast.literal.BooleanLiteral;
 
 import java.util.*;
@@ -74,8 +73,8 @@ public class SwaggerProvider {
 			path.addTag(groupName);
 			boolean hasBody = false;
 			try {
-				List<SwaggerEntity.Parameter> parameters = parseParameters(mapper, info);
-				hasBody = parameters.stream().anyMatch(it -> VAR_NAME_REQUEST_BODY.equals(it.getIn()));
+				List<Map<String, Object>> parameters = parseParameters(mapper, info);
+				hasBody = parameters.stream().anyMatch(it -> VAR_NAME_REQUEST_BODY.equals(it.get("in")));
 				BaseDefinition baseDefinition = info.getRequestBodyDefinition();
                 if (hasBody && baseDefinition != null) {
                     doProcessDefinition(baseDefinition, info, "root_" + baseDefinition.getName() , "request", 0);
@@ -116,10 +115,10 @@ public class SwaggerProvider {
 		return swaggerEntity;
 	}
 
-	private List<SwaggerEntity.Parameter> parseParameters(ObjectMapper mapper, ApiInfo info) {
-		List<SwaggerEntity.Parameter> parameters = new ArrayList<>();
-		info.getParameters().forEach(it -> parameters.add(new SwaggerEntity.Parameter(it.isRequired(), it.getName(), VAR_NAME_QUERY, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
-		info.getHeaders().forEach(it -> parameters.add(new SwaggerEntity.Parameter(it.isRequired(), it.getName(), VAR_NAME_HEADER, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
+	private List<Map<String, Object>> parseParameters(ObjectMapper mapper, ApiInfo info) {
+		List<Map<String, Object>> parameters = new ArrayList<>();
+		info.getParameters().forEach(it -> parameters.add(SwaggerEntity.createParameter(it.isRequired(), it.getName(), VAR_NAME_QUERY, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
+		info.getHeaders().forEach(it -> parameters.add(SwaggerEntity.createParameter(it.isRequired(), it.getName(), VAR_NAME_HEADER, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
 		List<Path> paths = new ArrayList<>(info.getPaths());
 		MappingHandlerMapping.findGroups(info.getGroupId())
 				.stream()
@@ -129,11 +128,11 @@ public class SwaggerProvider {
 						paths.add(it);
 					}
 				});
-		paths.forEach(it -> parameters.add(new SwaggerEntity.Parameter(it.isRequired(), it.getName(), VAR_NAME_PATH_VARIABLE, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
+		paths.forEach(it -> parameters.add(SwaggerEntity.createParameter(it.isRequired(), it.getName(), VAR_NAME_PATH_VARIABLE, it.getDataType().getJavascriptType(), it.getDescription(), it.getValue())));
 		try {
 			BaseDefinition baseDefinition = info.getRequestBodyDefinition();
 			if (baseDefinition!= null && baseDefinition.getChildren().size() > 0) {
-				SwaggerEntity.Parameter parameter = new SwaggerEntity.Parameter(baseDefinition.isRequired(), StringUtils.isNotBlank(baseDefinition.getName()) ? baseDefinition.getName() : VAR_NAME_REQUEST_BODY, VAR_NAME_REQUEST_BODY, baseDefinition.getDataType().getJavascriptType(), baseDefinition.getDescription(), baseDefinition);
+                Map<String, Object> parameter = SwaggerEntity.createParameter(baseDefinition.isRequired(), StringUtils.isNotBlank(baseDefinition.getName()) ? baseDefinition.getName() : VAR_NAME_REQUEST_BODY, VAR_NAME_REQUEST_BODY, baseDefinition.getDataType().getJavascriptType(), baseDefinition.getDescription(), baseDefinition);
 				Map<String, Object> schema = new HashMap<>(2);
 				String groupName = groupServiceProvider.getFullName(info.getGroupId()).replace("/", "-");
 				String voName =  groupName + "«" + info.getPath().replaceFirst("/", "").replaceAll("/", "_") + "«request«";
@@ -145,12 +144,13 @@ public class SwaggerProvider {
 
 				schema.put("originalRef", voName);
 				schema.put("$ref", DEFINITION + voName);
-				parameter.setSchema(schema);
+                parameter.put("schema", schema);
+				// parameter.setSchema(schema);
 				parameters.add(parameter);
 			}else{
 				Object object = mapper.readValue(info.getRequestBody(), Object.class);
 				if ((object instanceof List || object instanceof Map) && BooleanLiteral.isTrue(object)) {
-					parameters.add(new SwaggerEntity.Parameter(false, VAR_NAME_REQUEST_BODY, VAR_NAME_REQUEST_BODY, object instanceof List ? VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY : VAR_NAME_REQUEST_BODY_VALUE_TYPE_OBJECT, null, object));
+					parameters.add(SwaggerEntity.createParameter(false, VAR_NAME_REQUEST_BODY, VAR_NAME_REQUEST_BODY, object instanceof List ? VAR_NAME_REQUEST_BODY_VALUE_TYPE_ARRAY : VAR_NAME_REQUEST_BODY_VALUE_TYPE_OBJECT, null, object));
 				}
 			}