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;
}});

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。

您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!

↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓

posted @   Marydon  阅读(492)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2018-08-15 ibatis 调用存储过程
点击右上角即可分享
微信分享提示
sorry,本博客所有代码禁止复制,原创代码需扫码支付方可获取!
关闭

1、先加好友再付费,点我加好友;

2、代码不能满足你的需求?加好友付费定制你的专属代码!

3、付费标准及方式,点我查看详情。