From 9ced6e6412449736d1644e13dcb697384d962a57 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sun, 6 Nov 2022 14:59:32 -0800 Subject: [PATCH] Add test wrt #3651 --- .../databind/node/JsonNodeFactory.java | 1 - .../databind/node/JsonNodeFactoryTest.java | 27 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/node/JsonNodeFactory.java b/src/main/java/com/fasterxml/jackson/databind/node/JsonNodeFactory.java index da5240e797..0d37ae05f4 100644 --- a/src/main/java/com/fasterxml/jackson/databind/node/JsonNodeFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/node/JsonNodeFactory.java @@ -278,7 +278,6 @@ public ValueNode numberNode(BigDecimal v) if (v == null) { return nullNode(); } - /* * If the user wants the exact representation of this big decimal, * return the value directly diff --git a/src/test/java/com/fasterxml/jackson/databind/node/JsonNodeFactoryTest.java b/src/test/java/com/fasterxml/jackson/databind/node/JsonNodeFactoryTest.java index a9559c5eeb..068b2545c1 100644 --- a/src/test/java/com/fasterxml/jackson/databind/node/JsonNodeFactoryTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/node/JsonNodeFactoryTest.java @@ -9,7 +9,9 @@ public class JsonNodeFactoryTest extends NodeTestBase { - private final ObjectMapper MAPPER = objectMapper(); + private final ObjectMapper MAPPER = JsonMapper.builder() + .enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS) + .build(); static class SortingNodeFactory extends JsonNodeFactory { private static final long serialVersionUID = 1L; @@ -72,4 +74,27 @@ public void testSortingObjectNode() throws Exception assertEquals(BIGGER_OUTPUT, MAPPER.writeValueAsString(mapper.readTree(BIGGER_INPUT))); } + + // 06-Nov-2022, tatu: Wasn't being tests, oddly enough + public void testBigDecimalNormalization() throws Exception + { + final BigDecimal NON_NORMALIZED = new BigDecimal("12.5000"); + final BigDecimal NORMALIZED = NON_NORMALIZED.stripTrailingZeros(); + + // By default, 2.x WILL normalize + JsonNode n1 = MAPPER.readTree(String.valueOf(NON_NORMALIZED)); + assertEquals(NORMALIZED, n1.decimalValue()); + + // But can change + JsonNodeFactory nf = JsonNodeFactory.withExactBigDecimals(true); + JsonNode n2 = nf.numberNode(NON_NORMALIZED); + assertEquals(NON_NORMALIZED, n2.decimalValue()); + + ObjectMapper nonNormMapper = JsonMapper.builder() + .enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS) + .nodeFactory(nf) + .build(); + JsonNode n3 = nonNormMapper.readTree(String.valueOf(NON_NORMALIZED)); + assertEquals(NON_NORMALIZED, n3.decimalValue()); + } }