JsonConfig配置Clob 2025492编辑
Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注
资深码农+深耕理财=财富自由
欢迎关注

JsonConfig配置Clob
Created by Marydon on 2022-08-15 10:31
1.情景展示
项目使用的是Oracle数据库,并且表中的某些字段类型设置成了clob类型;
当我们从数据库读取数据的时候,需要单独对clob字段进行处理,否则返回的是内存地址。
2.具体分析
除了在ibatis和java当中进行数据转换外,我们也可以在即将返回给前端JSON数据前,完成数据的转换。
以net.sf.json为例进行举例说明
我们可以在调用JSONObject.fromObject(Object),将Object转换成JSON对象前,可以通过JsonConfig来自主定义:某些数据类型或对象,在转换成String时的转换规则。
3.解决方案
import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor;
JsonConfig jsonConfig = new JsonConfig(); // Date:2022年8月13日11:57:58 // Author:Marydon // Clob转换String(如果是Oracle的clob的话,数据类型必须使用这个,oracle.sql.CLOB.class,否则匹配失效) jsonConfig.registerJsonValueProcessor(oracle.sql.CLOB.class, new JsonValueProcessor() { @Override public Object processArrayValue(Object arg0, JsonConfig arg1) { return null; } @Override public Object processObjectValue(String arg0, Object clob, JsonConfig arg2) { String re = ""; Reader is = null; BufferedReader br = null; try { // 得到流 is = ((oracle.sql.CLOB) clob).getCharacterStream(); br = new BufferedReader(is); String s = br.readLine(); StringBuffer sb = new StringBuffer(); // 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING while (s != null) { sb.append(s); s = br.readLine(); } re = sb.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); } if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); } } return re; }}); // 使用自定义的规则,将对象转成JSON对象 JSONObject js = JSONObject.fromObject(baseAction.getModel(), jsonConfig);
4.拓展
同样地,我们也可以把日期类型在返回给前端时,完成指定的转换。
jsonConfig.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessor() { @Override public Object processArrayValue(Object value, JsonConfig jsonConfig) { String[] obj = {}; if (value != null) { if (value instanceof Date[]) { SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); Date[] dates = (Date[]) value; obj = new String[dates.length]; for (int i = 0; i < dates.length; i++) { obj[i] = sf.format(dates[i]); } } } return obj; } @Override public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { if (value != null) { if (value instanceof Date) { String str = new SimpleDateFormat("yyyy-MM-dd").format((Date) value); return str; } } return value; }});
与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。
您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!
↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/16587385.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2018-08-15 ibatis 调用存储过程