From 27137e75ce06a0b196563f5d90edf227a8ab8d00 Mon Sep 17 00:00:00 2001 From: Oleh Kurpiak Date: Sat, 14 Jan 2023 18:00:32 +0200 Subject: [PATCH] [Java][Spring] fix ParameterObject import for Spring Boot 3 (#14454) fix #14077 --- .../codegen/languages/SpringCodegen.java | 3 ++ .../java/spring/SpringCodegenTest.java | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 4d37bc7141d..ae2c80a8560 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -485,6 +485,9 @@ public class SpringCodegen extends AbstractJavaCodegen importMapping.put("DateTimeFormat", "org.springframework.format.annotation.DateTimeFormat"); importMapping.put("ApiIgnore", "springfox.documentation.annotations.ApiIgnore"); importMapping.put("ParameterObject", "org.springdoc.api.annotations.ParameterObject"); + if (isUseSpringBoot3()) { + importMapping.put("ParameterObject", "org.springdoc.core.annotations.ParameterObject"); + } if (useOptional) { writePropertyBack(USE_OPTIONAL, useOptional); 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 51e46760a1f..872c48c03b6 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 @@ -25,6 +25,7 @@ import static org.openapitools.codegen.languages.SpringCodegen.INTERFACE_ONLY; import static org.openapitools.codegen.languages.SpringCodegen.REQUEST_MAPPING_OPTION; import static org.openapitools.codegen.languages.SpringCodegen.RESPONSE_WRAPPER; import static org.openapitools.codegen.languages.SpringCodegen.SPRING_BOOT; +import static org.openapitools.codegen.languages.SpringCodegen.USE_SPRING_BOOT3; import static org.openapitools.codegen.languages.features.DocumentationProviderFeatures.DOCUMENTATION_PROVIDER; import static org.testng.Assert.assertEquals; import static org.testng.Assert.fail; @@ -1436,6 +1437,35 @@ public class SpringCodegenTest { .assertMethod("getWithMapOfStrings").hasReturnType("ResponseEntity>"); } + @Test + public void paramObjectImportForDifferentSpringBootVersions_issue14077() throws Exception { + Map additionalProperties = new HashMap<>(); + additionalProperties.put(SpringCodegen.USE_TAGS, "true"); + additionalProperties.put(DOCUMENTATION_PROVIDER, "springdoc"); + additionalProperties.put(SpringCodegen.INTERFACE_ONLY, "true"); + additionalProperties.put(SpringCodegen.SKIP_DEFAULT_INTERFACE, "true"); + Map files = generateFromContract("src/test/resources/2_0/petstore-with-spring-pageable.yaml", SPRING_BOOT, additionalProperties); + + JavaFileAssert.assertThat(files.get("PetApi.java")) + .hasImports("org.springdoc.api.annotations.ParameterObject") + .assertMethod("findPetsByStatus") + .hasParameter("pageable").withType("Pageable") + .assertParameterAnnotations() + .containsWithName("ParameterObject"); + + + // different import for SB3 + additionalProperties.put(USE_SPRING_BOOT3, "true"); + files = generateFromContract("src/test/resources/2_0/petstore-with-spring-pageable.yaml", SPRING_BOOT, additionalProperties); + + JavaFileAssert.assertThat(files.get("PetApi.java")) + .hasImports("org.springdoc.core.annotations.ParameterObject") + .assertMethod("findPetsByStatus") + .hasParameter("pageable").withType("Pageable") + .assertParameterAnnotations() + .containsWithName("ParameterObject"); + } + @Test public void shouldSetDefaultValueForMultipleArrayItems() throws IOException { Map additionalProperties = new HashMap<>();