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"
));
}