mysql、druid、jfinal2.2、fastjson 1.2.16
下午在写接口,返回未读消息,遇到了这个问题,
List<Record> recordList = Db.find(sql,sysUserId);
(CASE b.channel_type_id WHEN 5 THEN (SELECT count(1) FROM t_intercity_trip c WHERE c.sys_user_id = a.sys_user_id AND c.create_time > a.update_time) WHEN 6 THEN '上下班顺风车' ELSE '44444' END) unRead,
返回结果
然后就开始了各种尝试-。-
首先是切换成默认的jackson、jfinaljsonFactory. 结果unRead依然是byte类型。
2.之后就开始想把结果全部遍历一下,遍历到unRead这个字段,重新赋值成int类型
List<Map<StringObject>> (List<Record> recordsString... columns) { String changeColumns = (String column : columns) { changeColumns += column} List<Map<StringObject>> list = ArrayList<>()(Record record : records) { Map<StringObject> columnsMap = record.getColumns()(String key : columnsMap.keySet()){ (changeColumns.indexOf(key) != -){ columnsMap.put(key()columnsMap.get(key))} } list.add(columnsMap)} list}
报错 B cannot be cast to java.lang.Integer.
折腾许久之后无果,跑到群里求大腿help~~
在Dreamlu大神的耐心指导下,最终到sql中做点文章
首先使用cast的方式
select cast(11 as unsigned int)
select cast(11 as decimal(10,2))
结果druid报错,发现sql注入了... 原SQL的基础上就在count(1)外面套了个cast...
druidPlugin.setFilters("stat,wall");
druid就配置了这个,然而为什么说sql注入也是不懂..在换了好几个地方套cast之后,放弃了这个做法..
然后Dreamlu让我这样
结果居然可以了!!!
结果居然可以了!!!
结果居然可以了!!!
真是太神奇了!没想到写了辣么多代码,最终 *1 就能解决..
再次再次感谢jfinal提供了这么好用的框架~~,感谢Dreamlu的耐心指导~~