fastjson版本:尝试过1.2.47/1.2.49,反序列化超限整形为Integer field时,有的跑异常,有的返回一个不可预期的整数。 感觉像是一个bug。。。 如下代码: static class M { Integer i;
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
}
public static void main(String[] args) throws IOException {
String sInt[] = new String[]{"{\"i\":11234564654321321}"
, "{\"i\":1001234564654321321000000000000000000000}"
, "{\"i\":100000000000000000000012345646543213210}"
, "{\"i\":10000000000000000000001234564654321321}"
, "{\"i\":112345646543213210}"};
for (String s : sInt) {
try {
System.out.println(JSONObject.toJSONString(JSONObject.parseObject(s, M.class)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果: com.alibaba.fastjson.JSONException: parseInt error, field : i at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:99) at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:86) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1149) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:801) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:273) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:669) at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) at com.sensetime.ad.senseadx.common.util.TestOkHttp.main(TestOkHttp.java:71) Caused by: java.lang.NumberFormatException: 11234564654321321 at com.alibaba.fastjson.parser.JSONLexerBase.intValue(JSONLexerBase.java:1064) at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:81) ... 9 more com.alibaba.fastjson.JSONException: parseInt error, field : i at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:99) at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:86) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1149) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:801) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:273) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:669) at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) at com.sensetime.ad.senseadx.common.util.TestOkHttp.main(TestOkHttp.java:71) Caused by: java.lang.NumberFormatException: 1001234564654321321000000000000000000000 at com.alibaba.fastjson.parser.JSONLexerBase.intValue(JSONLexerBase.java:1064) at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:81) ... 9 more com.alibaba.fastjson.JSONException: parseInt error, field : i at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:99) at com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:86) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.parseField(JavaBeanDeserializer.java:1149) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:801) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:273) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:669) at com.alibaba.fastjson.JSON.parseObject(JSON.java:365) at com.alibaba.fastjson.JSON.parseObject(JSON.java:269) at com.alibaba.fastjson.JSON.parseObject(JSON.java:488) at com.sensetime.ad.senseadx.common.util.TestOkHttp.main(TestOkHttp.java:71) Caused by: java.lang.NumberFormatException: 100000000000000000000012345646543213210 at com.alibaba.fastjson.parser.JSONLexerBase.intValue(JSONLexerBase.java:1064) at com.alibaba.fastjson.serializer.IntegerCodec.deserialze(IntegerCodec.java:81) ... 9 more {"i":2074889897} {"i":843387546}