diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 25437042937468652f5f0e46b1c9c93290f6e9a6..2ef252c32197b580873f7bd173a2c33bad9bf7a7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -1297,9 +1297,21 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code if ("BigDecimal".equals(codegenModel.dataType)) { codegenModel.imports.add("BigDecimal"); } + + // additional import for different cases + addAdditionalImports(codegenModel, codegenModel.oneOf); + addAdditionalImports(codegenModel, codegenModel.anyOf); return codegenModel; } + private void addAdditionalImports(CodegenModel model, Set<String> dataTypeSet) { + for (String dataType : dataTypeSet) { + if (null != importMapping().get(dataType)) { + model.imports.add(dataType); + } + } + } + @Override public void postProcessModelProperty(CodegenModel model, CodegenProperty property) { if (model.getIsClassnameSanitized() && additionalProperties.containsKey(JACKSON)) { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java index 2edaa5024e70c3ab04abc901c90242b55da203cd..11956bdec172cf38d80013c7f3d1448746b64a51 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java @@ -855,6 +855,20 @@ public class AbstractJavaCodegenTest { Assert.assertEquals(fakeJavaCodegen.getTestFolder(), "src/test/java"); } + @Test + public void testOneOfModelImports() throws Exception { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/oneOf_nonPrimitive.yaml"); + final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); + codegen.preprocessOpenAPI(openAPI); + + Schema<?> schema = openAPI.getComponents().getSchemas().get("Example"); + CodegenModel cm = codegen.fromModel("Example", schema); + Assert.assertEquals(cm.imports.size(), 3); + Assert.assertTrue(cm.imports.contains("BigDecimal")); + Assert.assertTrue(cm.imports.contains("Date")); + Assert.assertTrue(cm.imports.contains("UUID")); + } + private static Schema<?> createObjectSchemaWithMinItems() { return new ObjectSchema() .addProperties("id", new IntegerSchema().format("int32")) diff --git a/modules/openapi-generator/src/test/resources/3_0/oneOf_nonPrimitive.yaml b/modules/openapi-generator/src/test/resources/3_0/oneOf_nonPrimitive.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fe9d58f0dd937534e0158963699e7d2a9d1f0075 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/oneOf_nonPrimitive.yaml @@ -0,0 +1,29 @@ +openapi: 3.0.1 +info: + version: 1.0.0 + title: Example - oneOf data type + license: + name: MIT +servers: + - url: http://api.example.xyz/v1 +paths: + /example: + get: + operationId: list + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/Example" +components: + schemas: + Example: + oneOf: + - type: string + format: uuid + - type: string + format: date-time + - type: integer + - type: number