From c1c2bc7f76a7dcec30edac8731750f4f37ea7ac9 Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Mon, 17 Aug 2020 15:24:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20swagger=20body=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E4=BE=9D=E8=B5=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metersphere/api/parse/Swagger2Parser.java | 25 +++++++++++++------ backend/src/main/java/io/metersphere/xpack | 1 + frontend/src/business/components/xpack | 1 + 3 files changed, 20 insertions(+), 7 deletions(-) create mode 160000 backend/src/main/java/io/metersphere/xpack create mode 160000 frontend/src/business/components/xpack diff --git a/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java b/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java index 5adb221a79..a9c08cdb70 100644 --- a/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java +++ b/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java @@ -139,16 +139,21 @@ public class Swagger2Parser extends ApiImportAbstractParser { simpleRef = refModel.getSimpleRef(); } Model model = definitions.get(simpleRef); - JSONObject bodyParameters = getBodyJSONObjectParameters(model.getProperties(), definitions); + HashSet refSet = new HashSet<>(); + refSet.add(simpleRef); + JSONObject bodyParameters = getBodyJSONObjectParameters(model.getProperties(), definitions, refSet); body.setRaw(bodyParameters.toJSONString()); } else if (schema instanceof ArrayModel) { ArrayModel arrayModel = (ArrayModel) bodyParameter.getSchema(); Property items = arrayModel.getItems(); if (items instanceof RefProperty) { RefProperty refProperty = (RefProperty) items; - Model model = definitions.get(refProperty.getSimpleRef()); + String simpleRef = refProperty.getSimpleRef(); + HashSet refSet = new HashSet<>(); + refSet.add(simpleRef); + Model model = definitions.get(simpleRef); JSONArray propertyList = new JSONArray(); - propertyList.add(getBodyJSONObjectParameters(model.getProperties(), definitions)); + propertyList.add(getBodyJSONObjectParameters(model.getProperties(), definitions, refSet)); body.setRaw(propertyList.toString()); } } @@ -156,20 +161,26 @@ public class Swagger2Parser extends ApiImportAbstractParser { body.setFormat("json"); } - private JSONObject getBodyJSONObjectParameters(Map properties, Map definitions) { + private JSONObject getBodyJSONObjectParameters(Map properties, Map definitions, HashSet refSet) { JSONObject jsonObject = new JSONObject(); properties.forEach((key, value) -> { if (value instanceof ObjectProperty) { ObjectProperty objectProperty = (ObjectProperty) value; - jsonObject.put(key, getBodyJSONObjectParameters(objectProperty.getProperties(), definitions)); + jsonObject.put(key, getBodyJSONObjectParameters(objectProperty.getProperties(), definitions, refSet)); } else if (value instanceof ArrayProperty) { ArrayProperty arrayProperty = (ArrayProperty) value; Property items = arrayProperty.getItems(); if (items instanceof RefProperty) { RefProperty refProperty = (RefProperty) items; - Model model = definitions.get(refProperty.getSimpleRef()); + String simpleRef = refProperty.getSimpleRef(); + if (refSet.contains(simpleRef)) { + jsonObject.put(key, new JSONArray()); + return; + } + refSet.add(simpleRef); + Model model = definitions.get(simpleRef); JSONArray propertyList = new JSONArray(); - propertyList.add(getBodyJSONObjectParameters(model.getProperties(), definitions)); + propertyList.add(getBodyJSONObjectParameters(model.getProperties(), definitions, refSet)); jsonObject.put(key, propertyList); } else { jsonObject.put(key, new ArrayList<>()); diff --git a/backend/src/main/java/io/metersphere/xpack b/backend/src/main/java/io/metersphere/xpack new file mode 160000 index 0000000000..356bb744a7 --- /dev/null +++ b/backend/src/main/java/io/metersphere/xpack @@ -0,0 +1 @@ +Subproject commit 356bb744a72304067b9222cb0cb2be01d4ebff2a diff --git a/frontend/src/business/components/xpack b/frontend/src/business/components/xpack new file mode 160000 index 0000000000..7e4d80cc2b --- /dev/null +++ b/frontend/src/business/components/xpack @@ -0,0 +1 @@ +Subproject commit 7e4d80cc2b870a8cac6dbb9fe6711ab6041faf6d