起因
因为一次测试环境的事故,发现用JSON.parseObject 转换map的时候,没有按照我规定的泛型去转换,就导致我用的时候出现了ClassCastException
Map<String, String> dataMap = JSON.parseObject(jsonString, Map.class);
解决方案
使用阿里巴巴的fastjson中的反序列化框架TypeReference `
Map<String, String> dataMap = JSON.parseObject(jsonString, new TypeReference<Map<String, String>>(){});
`
从这次事故中学习到了什么
parseObject在进行类型转换的时候无法精确转换为需要的类型 这种时候需要使用TypeReference
TypeReference是什么
TypeReference是阿里巴巴fastjson下的一个反序列化框架,字面意思是指Type的Reference,也就是某类型的一个指向或者引用
TypeReference的方法
无参构造
protected TypeReference() {
// 当前class的父类的type
Type superClass = this.getClass().getGenericSuperclass();
// 父类class的泛型数组,也就是实际的type
Type type = ((ParameterizedType)superClass).getActualTypeArguments()[0];
Type cachedType = (Type)classTypeCache.get(type);
if (cachedType == null) {
classTypeCache.putIfAbsent(type, type);
cachedType = (Type)classTypeCache.get(type);
}
this.type = cachedType;
}
有参构造
按指定类型返回泛型数组