Skip to content

Commit 4d060a7

Browse files
committed
Add test showing fix of #4917 (via jackson-core)
1 parent d0da72a commit 4d060a7

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

release-notes/VERSION-2.x

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Project: jackson-databind
88

99
#4787: Wrong `String.format()` in `StdDelegatingDeserializer` hides actual error
1010
(reported by @Horus1337)
11+
#4917: `BigDecimal` deserialization issue when using `@JsonCreator`
12+
(reported by @dbachdev)
1113

1214
2.17.3 (01-Nov-2024)
1315

src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKNumberDeserTest.java

+59
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,34 @@ static class NestedBigDecimalHolder2784 {
8282
public BigDecimalHolder2784 holder;
8383
}
8484

85+
static class DeserializationIssue4917 {
86+
public DecimalHolder4917 decimalHolder;
87+
public double number;
88+
}
89+
90+
static class DeserializationIssue4917V2 {
91+
public DecimalHolder4917 decimalHolder;
92+
public int number;
93+
}
94+
95+
static class DeserializationIssue4917V3 {
96+
public BigDecimal decimal;
97+
public double number;
98+
}
99+
100+
static class DecimalHolder4917 {
101+
public BigDecimal value;
102+
103+
private DecimalHolder4917(BigDecimal value) {
104+
this.value = value;
105+
}
106+
107+
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
108+
static DecimalHolder4917 of(BigDecimal value) {
109+
return new DecimalHolder4917(value);
110+
}
111+
}
112+
85113
/*
86114
/**********************************************************************
87115
/* Helper classes, serializers/deserializers/resolvers
@@ -386,4 +414,35 @@ public void testBigDecimalUnwrapped() throws Exception
386414
NestedBigDecimalHolder2784 result = mapper.readValue(JSON, NestedBigDecimalHolder2784.class);
387415
assertEquals(new BigDecimal("5.00"), result.holder.value);
388416
}
417+
418+
// [databind#4917]
419+
@Test
420+
public void bigDecimal4917() throws Exception
421+
{
422+
DeserializationIssue4917 issue = MAPPER.readValue(
423+
a2q("{'decimalHolder':100.00,'number':50}"),
424+
DeserializationIssue4917.class);
425+
assertEquals(new BigDecimal("100.00"), issue.decimalHolder.value);
426+
assertEquals(50.0, issue.number);
427+
}
428+
429+
@Test
430+
public void bigDecimal4917V2() throws Exception
431+
{
432+
DeserializationIssue4917V2 issue = MAPPER.readValue(
433+
a2q("{'decimalHolder':100.00,'number':50}"),
434+
DeserializationIssue4917V2.class);
435+
assertEquals(new BigDecimal("100.00"), issue.decimalHolder.value);
436+
assertEquals(50, issue.number);
437+
}
438+
439+
@Test
440+
public void bigDecimal4917V3() throws Exception
441+
{
442+
DeserializationIssue4917V3 issue = MAPPER.readValue(
443+
a2q("{'decimal':100.00,'number':50}"),
444+
DeserializationIssue4917V3.class);
445+
assertEquals(new BigDecimal("100.00"), issue.decimal);
446+
assertEquals(50, issue.number);
447+
}
389448
}

0 commit comments

Comments
 (0)