From 45d8a4832cd684fffc4d5ddab479ce570f07b4e4 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 18 Jun 2025 12:40:26 +0100 Subject: [PATCH 1/2] test case for serializing custom numbers with config overrides --- .../jackson/databind/ser/jdk/NumberSerTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java b/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java index 2efa4f5551..8ed4bbea07 100644 --- a/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java @@ -117,6 +117,12 @@ public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider se } } + static class MyBigDecimal extends BigDecimal { + public MyBigDecimal(String value) { + super(value); + } + } + /* /********************************************************** /* Test methods @@ -222,6 +228,15 @@ public void testCustomSerializationBigDecimalAsNumber() throws Exception { assertEquals(a2q("{'value':2.0}"), mapper.writeValueAsString(new BigDecimalHolder("2"))); } + @Test + public void testConfigOverrideNonJdkNumber() throws Exception { + ObjectMapper mapper = jsonMapperBuilder().withConfigOverride(MyBigDecimal.class, + c -> c.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING))) + .build(); + String value = mapper.writeValueAsString(new MyBigDecimal("123.456")); + assertEquals(a2q("'123.456'"), value); + } + // default locale is en_US static DecimalFormat createDecimalFormatForDefaultLocale(final String pattern) { return new DecimalFormat(pattern, new DecimalFormatSymbols(Locale.ENGLISH)); From 3b6904da8a7d18a57b2f1a5d0789d87719356f7b Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 18 Jun 2025 14:33:53 +0100 Subject: [PATCH 2/2] Update NumberSerTest.java --- .../jackson/databind/ser/jdk/NumberSerTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java b/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java index 8ed4bbea07..e11845c4c5 100644 --- a/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/ser/jdk/NumberSerTest.java @@ -228,6 +228,15 @@ public void testCustomSerializationBigDecimalAsNumber() throws Exception { assertEquals(a2q("{'value':2.0}"), mapper.writeValueAsString(new BigDecimalHolder("2"))); } + @Test + public void testConfigOverrideJdkNumber() throws Exception { + ObjectMapper mapper = jsonMapperBuilder().withConfigOverride(BigDecimal.class, + c -> c.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING))) + .build(); + String value = mapper.writeValueAsString(new BigDecimal("123.456")); + assertEquals(a2q("'123.456'"), value); + } + @Test public void testConfigOverrideNonJdkNumber() throws Exception { ObjectMapper mapper = jsonMapperBuilder().withConfigOverride(MyBigDecimal.class,