Map是Java开发中常用的集合,下面记录使用过程中常见的问题。
实体类中的boolean类型转Map<String,String>后,取出来报错
现在要将实体类转为Map<String,String>,然后在其他地方取出来。
SmsDto smsDto=new SmsDto();
//sendFlag是boolean类型
smsDto.setSendFlag(true);
Map<String,String> map=JSONObject.parseObject(JSON.toJSONString(smsDto),Map.class);
map.put("delay",Boolean.toString(true));
System.out.println(map.get("delay"));
System.out.println(map.get("sendFlag"));
结果运行时就直接报错了:
Exception in thread "main" java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
at cn.ali.station.test.TestController.main(TestController.java:186)
报错的地方其实就是最后一行中map.get(“sendFlag”)。
原因在于实体类中是boolean类型,然后就强行转为Map<String,String>了,所以在获取时就会直接处理转换异常的错误。
那么解决的办法有两种:
- 将Map<String,String> map改为Map<String,Object> map
- 将实体类中的boolean类型的字段取出来,转为String后,再放到map中。举例:
SmsDto smsDto=new SmsDto();
//sendFlag是boolean类型
smsDto.setSendFlag(true);
Map<String,String> map=JSONObject.parseObject(JSON.toJSONString(smsDto),Map.class);
map.put("sendFlag",Boolean.toString(smsDto.isSendFlag()));
System.out.println(map.get("sendFlag"));
这样获取时以String类型获取就不会出错了。
类似的问题,时间戳的也要格外注意。