class Bean {
private Long aLong;
public Long getaLong() {
return aLong;
}
public void setaLong(Long aLong) {
this.aLong = aLong;
}
}
/**
* fastjson根据整型数值的大小反序列化
* 如果数值大小在int范围内, 就用integer反序列化;
* 如果数值大小超过int范围, 就用Long反序列化;
* <p>
* 不管json字符串中整型的数值大小是在int范围还是在long范围,用long类型来接收, 总不会错的;
* <p>
* 但是如果是在反序列化的是Integer类型的数值,把Integer强转成Long肯定要抛出异常的;
* <p>
* 为了避免异常, 先把数值转成字符串, 然后再用
* Long.valueOf(String.valueOf(map.get("aLong")));
* <p>
* <p>
* <p>
* test1:验证fastjson根据整型数值大小决定反序列化后的整型类型是Integer还是Long
* <p>
* Long到Long
*/
@Test
public void test1() {
long l = Long.valueOf(String.valueOf(Integer.MAX_VALUE)) + 1;
//[{"aLong":2147483648},{"aLong":2147483648},{"aLong":2147483648}]
List<Bean> beans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Bean bean = new Bean();
bean.setaLong(l);
beans.add(bean);
}
String beansJson = JSON.toJSONString(beans);
System.out.println(beansJson);
List<Map> list = JSON.parseArray(beansJson, Map.class);
for (Map map : list) {
Long aLong = Long.valueOf(String.valueOf(map.get("aLong")));
System.out.println(aLong);
}
}
/**
* Integer 到 Long
*/
@Test
public void test2() {
List<Bean> beans = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Bean bean = new Bean();
bean.setaLong(Long.valueOf(i));
beans.add(bean);
}
String beansJson = JSON.toJSONString(beans);
List<Map> list = JSON.parseArray(beansJson, Map.class);
for (Map map : list) {
Long aLong = Long.valueOf(String.valueOf(map.get("aLong")));
System.out.println(aLong);
}
}
fastjson整型数值问题
最新推荐文章于 2024-03-18 10:00:00 发布