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 1ab927a6a26c..b20c11311144 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 @@ -6194,7 +6194,7 @@ public class DefaultCodegen implements CodegenConfig { // skip as it implies `consumes` in OAS2 is not defined continue; } else { - mediaType.put("mediaType", escapeText(escapeQuotationMark(key))); + mediaType.put("mediaType", escapeQuotationMark(key)); } mediaTypeList.add(mediaType); } @@ -6260,7 +6260,7 @@ public class DefaultCodegen implements CodegenConfig { for (String key : produces) { // escape quotation to avoid code injection, "*/*" is a special case, do nothing - String encodedKey = "*/*".equals(key) ? key : escapeText(escapeQuotationMark(key)); + String encodedKey = "*/*".equals(key) ? key : escapeQuotationMark(key); //Only unique media types should be added to "produces" if (!existingMediaTypes.contains(encodedKey)) { Map mediaType = new HashMap<>(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 22647ef5dd9d..59e2054df38b 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -1403,4 +1403,33 @@ public class SpringCodegenTest { .assertMethod("putSomeMapItem") .bodyContainsLines("super.putSomeMapItem(key, someMapItem);"); } + + @Test + public void shouldHandleContentTypeWithSecondWildcardSubtype_issue12457() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + + OpenAPI openAPI = new OpenAPIParser() + .readLocation("src/test/resources/bugs/issue_12457.yaml", null, new ParseOptions()).getOpenAPI(); + SpringCodegen codegen = new SpringCodegen(); + codegen.setLibrary(SPRING_BOOT); + codegen.setOutputDir(output.getAbsolutePath()); + codegen.additionalProperties().put(SpringCodegen.USE_TAGS, "true"); + + ClientOptInput input = new ClientOptInput() + .openAPI(openAPI) + .config(codegen); + + DefaultGenerator generator = new DefaultGenerator(); + Map files = generator.opts(input).generate().stream() + .collect(Collectors.toMap(File::getName, Function.identity())); + + JavaFileAssert.assertThat(files.get("UsersApi.java")) + .assertMethod("wildcardSubTypeForContentType") + .assertMethodAnnotations() + .containsWithNameAndAttributes("RequestMapping", ImmutableMap.of( + "produces", "{ \"application/json\", \"application/*\" }", + "consumes", "{ \"application/octet-stream\", \"application/*\" }" + )); + } } diff --git a/modules/openapi-generator/src/test/resources/bugs/issue_12457.yaml b/modules/openapi-generator/src/test/resources/bugs/issue_12457.yaml new file mode 100644 index 000000000000..84d770898ee9 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/bugs/issue_12457.yaml @@ -0,0 +1,33 @@ +openapi: 3.0.1 +info: + title: OpenAPI Petstore + description: "sample to vet integer handling" + version: 1.0.0 +tags: [] +paths: + /request: + get: + operationId: wildcardSubTypeForContentType + tags: + - users + requestBody: + description: The attachment + content: + application/octet-stream: + schema: + type: string + format: binary + application/*: + schema: + type: string + format: binary + responses: + '200': + description: response + content: + application/json: + schema: + type: string + application/*: + schema: + type: string \ No newline at end of file