From 38fdbe0c2c0e95b0db1dda0ce634da3d0c756fb7 Mon Sep 17 00:00:00 2001 From: Oleh Kurpiak Date: Tue, 3 Jan 2023 17:49:08 +0200 Subject: [PATCH] [Java] fix bigDecimalAsString config option (#14370) --- .../languages/AbstractJavaCodegen.java | 2 +- .../java/assertions/JavaFileAssert.java | 6 ++++ .../java/spring/SpringCodegenTest.java | 31 ++++++++++++++----- .../src/test/resources/bugs/issue_14252.yaml | 28 +++++++++++++++++ 4 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/bugs/issue_14252.yaml 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 2f2d7ebfcd7..c10979dd05e 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 @@ -1375,7 +1375,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code } if (serializeBigDecimalAsString) { - if ("decimal".equals(property.baseType)) { + if ("decimal".equals(property.baseType) || "bigdecimal".equalsIgnoreCase(property.baseType)) { // we serialize BigDecimal as `string` to avoid precision loss property.vendorExtensions.put("x-extra-annotation", "@JsonSerialize(using = ToStringSerializer.class)"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/assertions/JavaFileAssert.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/assertions/JavaFileAssert.java index 7111d389223..c2ba4827def 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/assertions/JavaFileAssert.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/assertions/JavaFileAssert.java @@ -114,6 +114,12 @@ public class JavaFileAssert extends AbstractAssert !annotation.getNameAsString().equals("NotNull")); - javaFileAssert.isNot(new Condition<>(classfile -> - classfile.getImports().stream().map(NodeWithName::getNameAsString) - .anyMatch("javax.validation.constraints.NotNull"::equals), "")); + javaFileAssert.hasNoImports("javax.validation.constraints.NotNull"); + } + + @Test + public void requiredFieldShouldIncludeNotNullAnnotationWithBeanValidationTrue_issue14252() throws IOException { + + SpringCodegen codegen = new SpringCodegen(); + codegen.setLibrary(SPRING_BOOT); + codegen.additionalProperties().put(CodegenConstants.SERIALIZE_BIG_DECIMAL_AS_STRING, "true"); + + Map files = generateFiles(codegen, "src/test/resources/bugs/issue_14252.yaml"); + + JavaFileAssert.assertThat(files.get("MyResponse.java")) + .printFileContent() + .hasImports("com.fasterxml.jackson.databind.annotation.JsonSerialize", "com.fasterxml.jackson.databind.ser.std.ToStringSerializer") + .assertMethod("getMyPropTypeNumber") + .assertMethodAnnotations() + .containsWithNameAndAttributes("JsonSerialize", ImmutableMap.of( + "using", "ToStringSerializer.class" + )); } @Test @@ -1595,10 +1611,9 @@ public class SpringCodegenTest { .printFileContent(); javaFileAssert.assertMethod("getName").assertMethodAnnotations() .containsWithName("NotNull").containsWithName("Size").containsWithName("Email"); - javaFileAssert.isNot(new Condition<>(classfile -> - classfile.getImports().stream().map(NodeWithName::getNameAsString) - .anyMatch("javax.validation.constraints.NotNull"::equals), "")); - javaFileAssert.hasImports("javax.validation.constraints"); + javaFileAssert + .hasNoImports("javax.validation.constraints.NotNull") + .hasImports("javax.validation.constraints"); } public void shouldUseEqualsNullableForArrayWhenSetInConfig_issue13385() throws IOException { diff --git a/modules/openapi-generator/src/test/resources/bugs/issue_14252.yaml b/modules/openapi-generator/src/test/resources/bugs/issue_14252.yaml new file mode 100644 index 00000000000..d81eab482da --- /dev/null +++ b/modules/openapi-generator/src/test/resources/bugs/issue_14252.yaml @@ -0,0 +1,28 @@ +openapi: 3.0.2 + +servers: +- url: https://test.org + +info: + version: 1.0.0 + title: test bigdecimal as String + description: test bigdecimal as String + +paths: + /test: + get: + operationId: get + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/MyResponse" + +components: + schemas: + MyResponse: + properties: + myPropTypeNumber: + type: number \ No newline at end of file