diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java index 371ea850e7..0a47ca639c 100644 --- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java +++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java @@ -194,7 +194,8 @@ public SwaggerParseResult convert(SwaggerDeserializationResult parse) { if ("body".equals(v.getIn())) { components.addRequestBodies(k, convertParameterToRequestBody(v)); } else if ("formData".equals(v.getIn())) { - components.addRequestBodies(k, convertFormDataToRequestBody(v)); + // formData_ is added not to overwrite existing schemas + components.addSchemas("formData_" + k, convertFormDataToSchema(v)); } else { components.addParameters(k, convert(v)); } @@ -529,6 +530,16 @@ private boolean isRefABodyParam(io.swagger.models.parameters.Parameter param) { return false; } + private boolean isRefAFormParam(io.swagger.models.parameters.Parameter param) { + if (param instanceof RefParameter) { + RefParameter refParameter = (RefParameter) param; + String simpleRef = refParameter.getSimpleRef(); + io.swagger.models.parameters.Parameter parameter = globalV2Parameters.get(simpleRef); + return "formData".equals(parameter.getIn()); + } + return false; + } + public Operation convert(io.swagger.models.Operation v2Operation) { Operation operation = new Operation(); if (StringUtils.isNotBlank(v2Operation.getDescription())) { @@ -555,10 +566,11 @@ public Operation convert(io.swagger.models.Operation v2Operation) { String $ref = convert.get$ref(); if ($ref != null && $ref.startsWith("#/components/requestBodies/") && isRefABodyParam(param)) { operation.setRequestBody(new RequestBody().$ref($ref)); + } else if ($ref != null && $ref.startsWith("#/components/schemas/") && isRefAFormParam(param)) { + formParams.add(param); } else { operation.addParametersItem(convert); } - //operation.addParametersItem(convert(param)); } } @@ -611,8 +623,9 @@ private Map convert(Map vendorExtensions) { return vendorExtensions; } - private RequestBody convertFormDataToRequestBody(io.swagger.models.parameters.Parameter formParam) { - return convertFormDataToRequestBody(Arrays.asList(formParam), null); + private Schema convertFormDataToSchema(io.swagger.models.parameters.Parameter formParam) { + SerializableParameter sp = (SerializableParameter) formParam; + return convert(sp); } private RequestBody convertFormDataToRequestBody(List formParams, List consumes) { @@ -621,73 +634,27 @@ private RequestBody convertFormDataToRequestBody(List mediaTypes = new ArrayList<>(globalConsumes); @@ -709,6 +676,69 @@ private RequestBody convertFormDataToRequestBody(List requestBodies = oas.getComponents().getRequestBodies(); - assertNotNull(requestBodies.get("formEmail").getContent().get("multipart/form-data")); - assertNotNull(requestBodies.get("formPassword").getContent().get("multipart/form-data")); + Map schemas = oas.getComponents().getSchemas(); + assertNotNull(schemas.get("formData_formEmail")); + assertNotNull(schemas.get("formData_formPassword")); assertNotNull(requestBodies.get("bodyParam").getContent().get("*/*")); - assertEquals(oas.getPaths().get("/formPost").getPost().getParameters().get(0).get$ref(), - REQUEST_BODY_FORMEMAIL); + assertNull(oas.getPaths().get("/formPost").getPost().getParameters()); + assertNotNull(oas.getPaths().get("/formPost").getPost().getRequestBody()); assertNotNull(oas.getPaths().get("/report/{userId}").getGet().getRequestBody(). getContent().get("multipart/form-data").getSchema().getProperties().get("limitForm")); }