Skip to content

Commit 5610b37

Browse files
pjfanningcowtowncoder
authored andcommitted
[jsr-353] big int issue
1 parent 52610a3 commit 5610b37

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

jsr-353/src/main/java/com/fasterxml/jackson/datatype/jsr353/JsonValueDeserializer.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,7 @@ protected JsonObject _deserializeObject(JsonParser p, DeserializationContext ctx
121121
b.addNull(name);
122122
break;
123123
case VALUE_NUMBER_FLOAT:
124-
if (p.getNumberType() == NumberType.BIG_DECIMAL) {
125-
b.add(name, p.getDecimalValue());
126-
} else {
127-
b.add(name, p.getDoubleValue());
128-
}
124+
b.add(name, p.getDecimalValue());
129125
break;
130126
case VALUE_NUMBER_INT:
131127
// very cumbersome... but has to be done
@@ -183,11 +179,7 @@ protected JsonArray _deserializeArray(JsonParser p, DeserializationContext ctxt)
183179
b.addNull();
184180
break;
185181
case VALUE_NUMBER_FLOAT:
186-
if (p.getNumberType() == NumberType.BIG_DECIMAL) {
187-
b.add(p.getDecimalValue());
188-
} else {
189-
b.add(p.getDoubleValue());
190-
}
182+
b.add(p.getDecimalValue());
191183
break;
192184
case VALUE_NUMBER_INT:
193185
// very cumbersome... but has to be done
@@ -230,10 +222,7 @@ protected JsonValue _deserializeScalar(JsonParser p, DeserializationContext ctxt
230222
// very cumbersome... but has to be done
231223
{
232224
JsonArrayBuilder b = _builderFactory.createArrayBuilder();
233-
if (p.getNumberType() == NumberType.BIG_DECIMAL) {
234-
return b.add(p.getDecimalValue()).build().get(0);
235-
}
236-
return b.add(p.getDoubleValue()).build().get(0);
225+
return b.add(p.getDecimalValue()).build().get(0);
237226
}
238227
case VALUE_NUMBER_INT:
239228
// very cumbersome... but has to be done

jsr-353/src/test/java/com/fasterxml/jackson/datatype/jsr353/JsonValueDeserializationTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.databind.node.ObjectNode;
88

99
import java.beans.ConstructorProperties;
10+
import java.math.BigDecimal;
1011

1112
public class JsonValueDeserializationTest extends TestBase
1213
{
@@ -135,4 +136,23 @@ public void testConstructorProperties() throws Exception
135136
assertNull(ob2.obj1);
136137
assertSame(JsonValue.NULL, ob2.obj2);
137138
}
139+
140+
public void testBigInteger() throws Exception
141+
{
142+
final String JSON = "[2e308]";
143+
JsonValue v = MAPPER.readValue(JSON, JsonValue.class);
144+
assertTrue(v instanceof JsonArray);
145+
JsonArray a = (JsonArray) v;
146+
assertEquals(1, a.size());
147+
assertTrue(a.get(0) instanceof JsonNumber);
148+
assertEquals(new BigDecimal("2e308").toBigInteger(), ((JsonNumber) a.get(0)).bigIntegerValue());
149+
150+
151+
// also, should work with explicit type
152+
JsonArray array = MAPPER.readValue(JSON, JsonArray.class);
153+
assertEquals(1, array.size());
154+
155+
// and round-tripping ought to be ok:
156+
assertEquals("[2E+308]", serializeAsString(v));
157+
}
138158
}

0 commit comments

Comments
 (0)