当前位置: 首页 > news >正文

JsonTypeHandler解析数据库json类型字段

背景:前端保存到数据库中的为json格式字符串。在解析后回显前端时需要使用到json格式。如果按照固定思维需要在后端增加很多的类字段以应对这个问题。解决的方案就是使用Map对象接收转换后的数据(这里的数据是json的格式存储的)

  • 数据库类型
    在这里插入图片描述
  • 存储的json结构数据

在这里插入图片描述

  • 配置json处理器类并使用注解方式配置
    在这里插入图片描述

    package com.ruoyi.common.mybatis;import cn.hutool.core.util.StrUtil;
    import com.baomidou.mybatisplus.core.toolkit.Assert;
    import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.MappedJdbcTypes;
    import org.apache.ibatis.type.MappedTypes;
    import com.ruoyi.common.utils.tduck.JsonUtils;import java.io.IOException;/*** Jackson 实现 JSON 字段类型处理器** @author hubin* @since 2019-08-25*/
    @Slf4j
    @MappedTypes({Object.class})
    @MappedJdbcTypes(JdbcType.VARCHAR)
    public class JacksonTypeHandler extends AbstractJsonTypeHandler<Object> {private static ObjectMapper objectMapper = new ObjectMapper();private Class<?> type;public JacksonTypeHandler(Class<?> type) {if (log.isTraceEnabled()) {log.trace("JacksonTypeHandler(" + type + ")");}Assert.notNull(type, "Type argument cannot be null");this.type = type;}public static void setObjectMapper(ObjectMapper objectMapper) {Assert.notNull(objectMapper, "ObjectMapper should not be null");JacksonTypeHandler.objectMapper = JsonUtils.getInstance();}@Overrideprotected Object parse(String json) {try {if (StrUtil.isBlank(json)) {return null;}return objectMapper.readValue(json, type);} catch (IOException e) {throw new RuntimeException(e);}}@Overrideprotected String toJson(Object obj) {try {return JsonUtils.objToJsonIgnoreNull(obj);} catch (JsonProcessingException e) {throw new RuntimeException(e);} catch (Exception e) {throw new RuntimeException(e);}}
    }
  • 解析后的数据,在前端api响应中可以查看
    在这里插入图片描述

  • 总结。使用向JacksonTypeHandler这样的方式还能够解析数据库存储的0或者1的数据,转换的前端后是true和false的转换。

相关文章:

  • QWebEngine
  • LVGL学习笔记-----标签控件(lv_label)
  • 【学习笔记】重载和重写的注意事项
  • 前端历练(一)Tailwind 配置
  • MCP(Model Context Protocol,模型上下文协议)的当前状态
  • 《棒垒球百科》棒球、垒球奥运会运动员规定·棒球1号位
  • kafka Tool (Offset Explorer)使用SASL Plaintext进行身份验证
  • Reels流量密码:Ins 2025算法偏好的7个隐形规则
  • 自动化模型管理:MediaPipe Android SDK 中的模型文件下载与加载机制
  • 中小企业数字化转型:如何选择靠谱的软件开发服务商?
  • 详解Python当中的pip常用命令
  • Day13_C语言基础项目实战
  • Python训练营-Day30-模块和库的导入
  • PHP设计模式实战:微服务架构与事件驱动系统
  • android过渡动画
  • iOS性能调试完整流程实录:工具组合下的问题定位与修复实践(含keymob)
  • PyTorch深度学习框架60天进阶学习计划 - 第58天端到端对话系统(一):打造你的专属AI语音助手
  • 嵌入式PADS原理图与元件符号绘制实现
  • 如何安装使用qmt脚本跟单聚宽策略
  • Vue嵌套路由
  • 怎样用网站做单笔外贸/seo基础培训
  • 基于html5动画的网站/提高工作效率整改措施
  • wordpress所有分类/四川seo快速排名
  • 化妆网站源码/学seo需要多久
  • 网站建设的可行性报告范文/搜索引擎营销优缺点
  • 徐州市住房建设局网站首页/怎么搭建属于自己的网站