Prechádzať zdrojové kódy

[*]解决responseBody属性拷贝丢失,受执行时浅拷贝导致设置了BaseDefinition的name导致swagger文档生成影响的bug

Lianjy 3 rokov pred
rodič
commit
fd473e5431

+ 2 - 1
magic-api/src/main/java/org/ssssssss/magicapi/controller/RequestHandler.java

@@ -1,5 +1,6 @@
 package org.ssssssss.magicapi.controller;
 
+import org.apache.commons.lang3.SerializationUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -96,7 +97,7 @@ public class RequestHandler extends MagicController {
 			doValidate("header", requestEntity.getApiInfo().getHeaders(), headers, HEADER_INVALID);
 			// 验证 path
 			doValidate("path", paths, requestEntity.getPathVariables(), PATH_VARIABLE_INVALID);
-			BaseDefinition requestBody = requestEntity.getApiInfo().getRequestBodyDefinition();
+			BaseDefinition requestBody = SerializationUtils.clone(requestEntity.getApiInfo().getRequestBodyDefinition());
 			if (requestBody != null && requestBody.getChildren().size() > 0) {
 				requestBody.setName(StringUtils.defaultIfBlank(requestBody.getName(), "root"));
 				doValidate(VAR_NAME_REQUEST_BODY, Collections.singletonList(requestBody), new HashMap<String, Object>() {{

+ 3 - 2
magic-api/src/main/java/org/ssssssss/magicapi/model/BaseDefinition.java

@@ -1,10 +1,11 @@
 package org.ssssssss.magicapi.model;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Objects;
 
-public class BaseDefinition {
-
+public class BaseDefinition implements Serializable {
+    private static final long serialVersionUID = 1L;
 	/**
 	 * 名
 	 */

+ 4 - 4
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.get("in")));
 				BaseDefinition baseDefinition = info.getRequestBodyDefinition();
                 if (hasBody && baseDefinition != null) {
-                    doProcessDefinition(baseDefinition, info, "root_" + baseDefinition.getName() , "request", 0);
+                    doProcessDefinition(baseDefinition, info, "root_", "request", 0);
                 }
 				baseDefinition = info.getResponseBodyDefinition();
 				parameters.forEach(path::addParameter);
@@ -138,7 +138,7 @@ 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 += "root_" + (StringUtils.isNotBlank(baseDefinition.getChildren().get(0).getName()) ? "_" + baseDefinition.getChildren().get(0).getName() : "_") +  "»»»";
+					voName += "root_" + (StringUtils.isNotBlank(baseDefinition.getName()) ? baseDefinition.getName() + "_" : "_") +  "»»»";
 
 					Map<String, Object> items = new HashMap<>(2);
 					items.put("originalRef", voName);
@@ -206,7 +206,7 @@ public class SwaggerProvider {
 			}
 			definition.put("properties", properties);
 			definition.put("description", target.getDescription());
-			definition.put("type", target.getDataType().getJavascriptType());
+			definition.put("type", target.getDataType());
 
             if (this.DEFINITION_MAP.containsKey(voName)) {
 				// TODO 应该不会出现名字都一样的
@@ -219,7 +219,7 @@ public class SwaggerProvider {
 
         } else {
             result.put("example", target.getValue());
-			result.put("type", target.getDataType().getJavascriptType());
+			result.put("type", target.getDataType());
         }
         return result;
     }

+ 2 - 54
magic-editor/src/console/src/components/layout/magic-run.vue

@@ -17,7 +17,7 @@ import MagicJson from '@/components/common/magic-json.vue'
 import bus from '@/scripts/bus.js'
 import * as monaco from 'monaco-editor'
 import store from '@/scripts/store.js'
-import {isVisible} from '@/scripts/utils.js'
+import {isVisible, deepClone} from '@/scripts/utils.js'
 import {parseJson} from '@/scripts/parsing/parser.js'
 
 export default {
@@ -108,63 +108,11 @@ export default {
         }
         let ret = parseJson(bodyStr)
         if(ret){
-          this.responseBody = ret;
+          this.responseBody = this.valueCopy(ret, [this.info.responseBodyDefinition]);
           this.forceUpdate = !this.forceUpdate
         }
     },
-    processBody(body, level) {
-      let arr = [], that = this
-      Object.keys(body).forEach((key) => {
-        let param = {
-          name: 'Array' !== this.getType(body) ? key : 'Array' === this.getType(body) && 'Object' !== that.getType(body[key]) ? key : '',
-          value: 'Object' !== that.getType(body[key]) && 'Array' !== that.getType(body[key]) ? body[key] : '',
-          dataType: this.getType(body[key]),
-          validateType: '',
-          expression: '',
-          error: '',
-          description: '',
-          children: [],
-          level: level + 1,
-          selected: false
-        }
-        if ('Object' === that.getType(body[key]) || 'Array' === that.getType(body[key])) {
-          param.children = that.processBody('Array' === that.getType(body[key]) ? deepClone([body[key][0]]) : body[key], level + 1);
-        }
-        arr.push(param)
 
-      })
-      return arr;
-    },
-    getType(object) {
-      if (Object.prototype.toString.call(object) === '[object Number]') {
-        if(object.toString().indexOf('.') !==-1 && parseInt(object) !== parseFloat(object)) {
-          return "Double";
-        }
-        // if (object >= -128 && object <= 127) {
-        //   return "Byte";
-        // }
-        // if (object >= -32768 && object <= 32767) {
-        //   return "Short";
-        // }
-        if (object >= -2147483648 && object <= 2147483647) {
-          return "Integer";
-        }
-        return "Long";
-      }
-      if (Object.prototype.toString.call(object) === '[object String]') {
-        return "String";
-      }
-      if (Object.prototype.toString.call(object) === '[object Boolean]') {
-        return "Boolean";
-      }
-      if (Object.prototype.toString.call(object) === '[object Array]') {
-        return "Array";
-      }
-      if (Object.prototype.toString.call(object) === '[object Object]') {
-        return "Object";
-      }
-      return "String";
-    },
     valueCopy(newBody, oldBody, arrayFlag = false) {
       if (oldBody.length == 0) {
         return newBody

+ 2 - 2
magic-editor/src/console/src/scripts/parsing/parser.js

@@ -803,7 +803,7 @@ function processBody(body, level) {
             let param = {
                 ...defaultParam,
                 name: key.span.getText().replace(/['"]/g,''),
-                value: isSimpleObject(value) ? value.span.getText() : '',
+                value: isSimpleObject(value) ? value.span.getText().trim() : '',
                 dataType: getType(value),
             }
             if(value instanceof MapLiteral || value instanceof ListLiteral){
@@ -816,7 +816,7 @@ function processBody(body, level) {
             let value = body.values[0]
             let param = {
                 ...defaultParam,
-                value: isSimpleObject(value) ? value.span.getText() : '',
+                value: isSimpleObject(value) ? value.span.getText().trim() : '',
                 dataType: getType(value),
             }
             if(value instanceof MapLiteral || value instanceof ListLiteral){