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 43d890695e0..00125e5d307 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 @@ -568,15 +568,16 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code this.sanitizeConfig(); // optional jackson mappings for BigDecimal support - importMapping.put("ToStringSerializer", "com.fasterxml.jackson.databind.ser.std.ToStringSerializer"); - importMapping.put("JsonSerialize", "com.fasterxml.jackson.databind.annotation.JsonSerialize"); - importMapping.put("JsonDeserialize", "com.fasterxml.jackson.databind.annotation.JsonDeserialize"); + if (serializeBigDecimalAsString) { + importMapping.put("JsonFormat", "com.fasterxml.jackson.annotation.JsonFormat"); + } // imports for pojos importMapping.put("ApiModelProperty", "io.swagger.annotations.ApiModelProperty"); importMapping.put("ApiModel", "io.swagger.annotations.ApiModel"); importMapping.put("Schema", "io.swagger.v3.oas.annotations.media.Schema"); importMapping.put("BigDecimal", "java.math.BigDecimal"); + importMapping.put("JsonDeserialize", "com.fasterxml.jackson.databind.annotation.JsonDeserialize"); importMapping.put("JsonProperty", "com.fasterxml.jackson.annotation.JsonProperty"); importMapping.put("JsonSubTypes", "com.fasterxml.jackson.annotation.JsonSubTypes"); importMapping.put("JsonTypeInfo", "com.fasterxml.jackson.annotation.JsonTypeInfo"); @@ -1705,11 +1706,10 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code if (serializeBigDecimalAsString && jackson) { 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)"); + property.vendorExtensions.put("x-extra-annotation", "@JsonFormat(shape = JsonFormat.Shape.STRING)"); // this requires some more imports to be added for this model... - model.imports.add("ToStringSerializer"); - model.imports.add("JsonSerialize"); + model.imports.add("JsonFormat"); } } @@ -1727,7 +1727,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code model.imports.add("Arrays"); } else if ("set".equals(property.containerType)) { model.imports.add("LinkedHashSet"); - if ((!openApiNullable || !property.isNullable) && jackson) { // cannot be wrapped to nullable + if ((!openApiNullable || !property.isNullable) && jackson) { // cannot be wrapped to nullable model.imports.add("JsonDeserialize"); property.vendorExtensions.put("x-setter-extra-annotation", "@JsonDeserialize(as = LinkedHashSet.class)"); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFClientCodegen.java index 1b72f5699ac..3e0db3fbc04 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFClientCodegen.java @@ -132,9 +132,6 @@ public class JavaCXFClientCodegen extends AbstractJavaCodegen super.postProcessModelProperty(model, property); model.imports.remove("ApiModelProperty"); model.imports.remove("ApiModel"); - model.imports.remove("JsonSerialize"); - model.imports.remove("ToStringSerializer"); - if (jackson) { //Add jackson imports when model has inner enum diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java index a1efb7ae720..fe98213a9e1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaCXFServerCodegen.java @@ -227,8 +227,7 @@ public class JavaCXFServerCodegen extends AbstractJavaJAXRSServerCodegen super.postProcessModelProperty(model, property); model.imports.remove("ApiModelProperty"); model.imports.remove("ApiModel"); - model.imports.remove("JsonSerialize"); - model.imports.remove("ToStringSerializer"); + model.imports.remove("JsonFormat"); //Add imports for Jackson when model has inner enum if (isJackson()) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java index 397b41b1741..f6230e40289 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java @@ -937,8 +937,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen if (MICROPROFILE.equals(getLibrary())) { model.imports.remove("ApiModelProperty"); model.imports.remove("ApiModel"); - model.imports.remove("JsonSerialize"); - model.imports.remove("ToStringSerializer"); } if (!BooleanUtils.toBoolean(model.isEnum)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java index 2762202eb8d..701a51e5107 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaHelidonClientCodegen.java @@ -371,14 +371,10 @@ public class JavaHelidonClientCodegen extends JavaHelidonCommonCodegen { if (HELIDON_MP.equals(getLibrary())) { model.imports.remove("ApiModelProperty"); model.imports.remove("ApiModel"); - model.imports.remove("JsonSerialize"); - model.imports.remove("ToStringSerializer"); } else if (HELIDON_SE.equals(getLibrary())) { // TODO check for SE-specifics model.imports.remove("ApiModelProperty"); model.imports.remove("ApiModel"); - model.imports.remove("JsonSerialize"); - model.imports.remove("ToStringSerializer"); } if ("set".equals(property.containerType) && !JACKSON.equals(serializationLibrary)) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java index c0cc50bb49f..0127f17688a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java @@ -250,8 +250,6 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen { codegenModel.imports.remove("ApiModel"); } if (!jackson) { - codegenModel.imports.remove("JsonSerialize"); - codegenModel.imports.remove("ToStringSerializer"); codegenModel.imports.remove("JsonValue"); codegenModel.imports.remove("JsonProperty"); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java index 4c50581c0bb..6c8d0fdf94a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinSpringServerCodegen.java @@ -435,10 +435,6 @@ public class KotlinSpringServerCodegen extends AbstractKotlinCodegen typeMapping.put("map", "kotlin.collections.MutableMap"); } - // optional jackson mappings for BigDecimal support - importMapping.put("ToStringSerializer", "com.fasterxml.jackson.databind.ser.std.ToStringSerializer"); - importMapping.put("JsonSerialize", "com.fasterxml.jackson.databind.annotation.JsonSerialize"); - // Swagger import mappings importMapping.put("ApiModel", "io.swagger.annotations.ApiModel"); importMapping.put("ApiModelProperty", "io.swagger.annotations.ApiModelProperty"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index a16014271aa..1e3446d106f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -2626,7 +2626,7 @@ public class JavaClientCodegenTest { /** * Regression test for #6496 */ - @Test void doesNotGenerateJacksonToStringSerializerAnnotation_whenLibraryIsGson_andSerializeBigDecimalAsStringIsTrue() { + @Test void doesNotGenerateJacksonJsonFormatAnnotation_whenLibraryIsGson_andSerializeBigDecimalAsStringIsTrue() { final CodegenConfigurator configurator = new CodegenConfigurator() .setGeneratorName("java") .setLibrary(JavaClientCodegen.OKHTTP_GSON) @@ -2643,10 +2643,8 @@ public class JavaClientCodegenTest { assertThat(files).hasSize(1).first(FILE).content() .doesNotContain( "@JsonDeserialize(as = LinkedHashSet.class)", - "@JsonSerialize(using = ToStringSerializer.class)", - "com.fasterxml.jackson.databind.ser.std.ToStringSerializer", - "com.fasterxml.jackson.databind.annotation.JsonDeserialize", - "com.fasterxml.jackson.databind.annotation.JsonSerialize" + "@JsonFormat(shape = JsonFormat.Shape.STRING)", + "com.fasterxml.jackson.databind.annotation.JsonDeserialize" ); } @@ -2654,7 +2652,7 @@ public class JavaClientCodegenTest { * Test that fix for #6496 has * no unwanted side effects on the existing feature (Jackson + bigDecimalAsString) */ - @Test void generatesJacksonToStringSerializerAnnotation_whenLibraryIsJackson_andSerializeBigDecimalAsStringIsTrue() { + @Test void generatesJacksonJsonFormatAnnotation_whenLibraryIsJackson_andSerializeBigDecimalAsStringIsTrue() { final CodegenConfigurator configurator = new CodegenConfigurator() .setGeneratorName("java") .setLibrary(JavaClientCodegen.NATIVE) @@ -2672,10 +2670,8 @@ public class JavaClientCodegenTest { assertThat(files).hasSize(1).first(FILE).content() .contains( "@JsonDeserialize(as = LinkedHashSet.class)", - "@JsonSerialize(using = ToStringSerializer.class)", - "com.fasterxml.jackson.databind.ser.std.ToStringSerializer", - "com.fasterxml.jackson.databind.annotation.JsonDeserialize", - "com.fasterxml.jackson.databind.annotation.JsonSerialize" + "@JsonFormat(shape = JsonFormat.Shape.STRING)", + "com.fasterxml.jackson.databind.annotation.JsonDeserialize" ); } 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 1a4c07ef12e..37863f2659f 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 @@ -2478,11 +2478,11 @@ public class SpringCodegenTest { Map files = generateFiles(codegen, "src/test/resources/bugs/issue_14252.yaml"); JavaFileAssert.assertThat(files.get("MyResponse.java")) - .hasImports("com.fasterxml.jackson.databind.annotation.JsonSerialize", "com.fasterxml.jackson.databind.ser.std.ToStringSerializer") + .hasImports("com.fasterxml.jackson.annotation.JsonFormat") .assertMethod("getMyPropTypeNumber") .assertMethodAnnotations() - .containsWithNameAndAttributes("JsonSerialize", ImmutableMap.of( - "using", "ToStringSerializer.class" + .containsWithNameAndAttributes("JsonFormat", ImmutableMap.of( + "shape", "JsonFormat.Shape.STRING" )); }