From ec4ff14bf662b3f2a6a2e04de9255eebfc7a3154 Mon Sep 17 00:00:00 2001 From: chenjianxing Date: Thu, 3 Dec 2020 21:13:53 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=A4=84=E7=90=86swagger=E5=93=8D?= =?UTF-8?q?=E5=BA=94=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metersphere/api/parse/Swagger2Parser.java | 55 +++++++++++++++---- 1 file changed, 44 insertions(+), 11 deletions(-) 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 b00edd44ca..a12ca60fd9 100644 --- a/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java +++ b/backend/src/main/java/io/metersphere/api/parse/Swagger2Parser.java @@ -7,6 +7,7 @@ import io.metersphere.api.dto.ApiTestImportRequest; import io.metersphere.api.dto.definition.ApiDefinitionResult; import io.metersphere.api.dto.definition.parse.ApiDefinitionImport; import io.metersphere.api.dto.definition.request.sampler.MsHTTPSamplerProxy; +import io.metersphere.api.dto.definition.response.HttpResponse; import io.metersphere.api.dto.parse.ApiImport; import io.metersphere.api.dto.scenario.Body; import io.metersphere.api.dto.scenario.KeyValue; @@ -20,7 +21,6 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.io.InputStream; -import java.sql.Connection; import java.util.*; public class Swagger2Parser extends ApiImportAbstractParser { @@ -65,7 +65,7 @@ public class Swagger2Parser extends ApiImportAbstractParser { apiDefinition.setRequest(JSON.toJSONString(request)); apiDefinition.setId(request.getId()); results.add(apiDefinition); - + parseResponse(operation.getResponses()); // List tags = operation.getTags(); // if (tags != null) { @@ -142,7 +142,7 @@ public class Swagger2Parser extends ApiImportAbstractParser { parseFormDataParameters((FormParameter) parameter, request.getBody()); break; case SwaggerParameterType.BODY: - parseBodyParameters(parameter, request.getBody()); + parseRequestBodyParameters(parameter, request.getBody()); break; case SwaggerParameterType.HEADER: parseHeaderParameters(parameter, request.getHeaders()); @@ -207,14 +207,45 @@ public class Swagger2Parser extends ApiImportAbstractParser { addHeader(headers, headerParameter.getName(), "", getDefaultStringValue(headerParameter.getDescription())); } - private void parseBodyParameters(Parameter parameter, Body body) { - BodyParameter bodyParameter = (BodyParameter) parameter; - Model schema = bodyParameter.getSchema(); + private void parseResponse(Map responses) { + HttpResponse msResponse = new HttpResponse(); + msResponse.setBody(new Body()); + msResponse.setHeaders(new ArrayList<>()); + msResponse.setType(RequestType.HTTP); + // todo 状态码要调整? + msResponse.setStatusCode(new ArrayList<>()); + if (responses != null) { + responses.forEach((responseCode, response) -> { + msResponse.getStatusCode().add(new KeyValue(responseCode, responseCode)); + parseResponseHeader(response, msResponse.getHeaders()); + parseResponseBodyParameters(response, msResponse.getBody()); + }); + } + } + private void parseResponseHeader(Response response, List msHeaders) { + Map headers = response.getHeaders(); + if (headers != null) { + headers.forEach((k, v) -> { + msHeaders.add(new KeyValue(k, "", v.getDescription())); + }); + } + } + + private void parseResponseBodyParameters(Response response, Body body) { + body.setRaw(parseSchema(response.getResponseSchema())); + } + + private void parseRequestBodyParameters(Parameter parameter, Body body) { + BodyParameter bodyParameter = (BodyParameter) parameter; + body.setRaw(parseSchema(bodyParameter.getSchema())); + } + + private String parseSchema(Model schema) { // 引用模型 if (schema instanceof RefModel) { String simpleRef = ""; - RefModel refModel = (RefModel) bodyParameter.getSchema(); + RefModel refModel = (RefModel) schema; String originalRef = refModel.getOriginalRef(); if (refModel.getOriginalRef().split("/").length > 3) { simpleRef = originalRef.replace("#/definitions/", ""); @@ -226,11 +257,12 @@ public class Swagger2Parser extends ApiImportAbstractParser { refSet.add(simpleRef); if (model != null) { JSONObject bodyParameters = getBodyParameters(model.getProperties(), refSet); - body.setRaw(bodyParameters.toJSONString()); + //body.setRaw(bodyParameters.toJSONString()); + return bodyParameters.toJSONString(); } } else if (schema instanceof ArrayModel) { //模型数组 - ArrayModel arrayModel = (ArrayModel) bodyParameter.getSchema(); + ArrayModel arrayModel = (ArrayModel) schema; Property items = arrayModel.getItems(); if (items instanceof RefProperty) { RefProperty refProperty = (RefProperty) items; @@ -240,10 +272,11 @@ public class Swagger2Parser extends ApiImportAbstractParser { Model model = definitions.get(simpleRef); JSONArray propertyList = new JSONArray(); propertyList.add(getBodyParameters(model.getProperties(), refSet)); - body.setRaw(propertyList.toString()); + // body.setRaw(propertyList.toString()); + return propertyList.toString(); } } - body.setFormat("json"); + return ""; } private JSONObject getBodyParameters(Map properties, HashSet refSet) {