diff --git a/src/main/java/tools/jackson/databind/node/JsonNodeFactory.java b/src/main/java/tools/jackson/databind/node/JsonNodeFactory.java index 8963677d81..98a138c5f5 100644 --- a/src/main/java/tools/jackson/databind/node/JsonNodeFactory.java +++ b/src/main/java/tools/jackson/databind/node/JsonNodeFactory.java @@ -273,7 +273,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/tools/jackson/databind/node/JsonNodeFactoryTest.java b/src/test/java/tools/jackson/databind/node/JsonNodeFactoryTest.java index 6d7191c2b5..d7c9813c59 100644 --- a/src/test/java/tools/jackson/databind/node/JsonNodeFactoryTest.java +++ b/src/test/java/tools/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()); + } }