diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index e973ce6329e05b6fd9062eafd0944862ae94308a..8c2c073737bae7e38661717e3ec8a80e3acd5c2f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2844,8 +2844,15 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.vendorExtensions.putAll(parameter.getExtensions()); } - if (parameter.getSchema() != null) { - Schema parameterSchema = ModelUtils.unaliasSchema(this.openAPI, parameter.getSchema()); + if (parameter.getSchema() != null || parameter.getContent() != null) { + Schema parameterSchema = null; + if (parameter.getSchema() != null) { + parameterSchema = ModelUtils.unaliasSchema(this.openAPI, parameter.getSchema()); + } else if (parameter.getContent().values().stream().findFirst().isPresent()) { + MediaType mediaType = parameter.getContent().values().stream().findFirst().get(); + parameterSchema = ModelUtils.getReferencedSchema(openAPI, mediaType.getSchema()); + } + if (parameterSchema == null) { LOGGER.warn("warning! Schema not found for parameter \"" + parameter.getName() + "\", using String"); parameterSchema = new StringSchema().description("//TODO automatically added by openapi-generator due to missing type definition."); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index efdf43561c9ff6817c5a1d58bb0bdd3f6181052c..b90f440cb00949ae512c5c4adfa15262c57ddee2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -37,8 +37,11 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.regex.Matcher; import java.util.stream.Collectors; +import java.util.regex.Pattern; + public class ModelUtils { private static final Logger LOGGER = LoggerFactory.getLogger(ModelUtils.class); @@ -227,6 +230,7 @@ public class ModelUtils { } } + private static void visitSchema(OpenAPI openAPI, Schema schema, String mimeType, List<String> visitedSchemas, OpenAPISchemaVisitor visitor) { visitor.visit(schema, mimeType); if (schema.get$ref() != null) { @@ -287,9 +291,8 @@ public class ModelUtils { } public static String getSimpleRef(String ref) { - if (ref.startsWith("#/components/")) { - ref = ref.substring(ref.lastIndexOf("/") + 1); - } else if (ref.startsWith("#/definitions/")) { + Pattern refPattern = Pattern.compile("((\\./)?.*)?#/(components|definitions)/.*"); + if (refPattern.matcher(ref).matches()) { ref = ref.substring(ref.lastIndexOf("/") + 1); } else { LOGGER.warn("Failed to get the schema name: {}", ref);