开发中遇到一个小问题,常用的json String转换为java对象的写法如下:
Gson gson = new Gson();
PublicServiceResponse<Map<Long, List<ActivityAPIBO>>> res = new PublicServiceResponse<Map<Long, List<ActivityAPIBO>>>();
resMap = gson.fromJson(jsonString, res.class)
当拿到resMap是使用Long类型的ID作为key去取得结果为空,经调试发现使用String类型的ID取值时可以正确返回。
也就是说转换时虽然指定的了Map的Key为Long类型,Gson还是默认解析为String类型的。
测试了fastJson结果相同。
Gson的解决办法,引入新的类TypeToken:
http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/reflect/TypeToken.html
TypeToken<PublicResp<Map<Long, List<JavaBean>>>> type = new TypeToken<PublicResp<Map<Long, List<JavaBean>>>>(){};
res = gson.fromJson(html, type.getType());
此时,Key为Long型了。