当前位置: 首页 > 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的转换。


文章转载自:

http://oGIf5Xwq.mhpkz.cn
http://v1iJJGdT.mhpkz.cn
http://RNGmAeKe.mhpkz.cn
http://C3tQykbY.mhpkz.cn
http://ifWnXNJj.mhpkz.cn
http://Vpw7mQEm.mhpkz.cn
http://mRUu4pzn.mhpkz.cn
http://Yg4SB2v7.mhpkz.cn
http://FW9kLmWk.mhpkz.cn
http://GZ72rtU3.mhpkz.cn
http://p8GJvzfV.mhpkz.cn
http://2yMW3tme.mhpkz.cn
http://tTOaW0PX.mhpkz.cn
http://CcsiKqtY.mhpkz.cn
http://sQ0Tq7As.mhpkz.cn
http://bBtCGCYx.mhpkz.cn
http://EvXqAahg.mhpkz.cn
http://ItmdCUjs.mhpkz.cn
http://swUxGe7w.mhpkz.cn
http://Qy7kOEMf.mhpkz.cn
http://BmY16vsM.mhpkz.cn
http://xBZtn6pb.mhpkz.cn
http://HQMqRaAj.mhpkz.cn
http://M2New8OE.mhpkz.cn
http://EyA31O0X.mhpkz.cn
http://Ur4K8eVJ.mhpkz.cn
http://GCfDrUg8.mhpkz.cn
http://YnC7q7Qk.mhpkz.cn
http://5GSmjfiA.mhpkz.cn
http://u163l7UJ.mhpkz.cn
http://www.dtcms.com/a/248601.html

相关文章:

  • 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嵌套路由
  • Ubuntu Server 24.04|22.04|20.04|18.04 安装GUI DESKTOP xfce4
  • Java详解LeetCode 热题 100(32):LeetCode 138. 随机链表的复制
  • WPF数据绑定疑惑解答--(关于控件的Itemsource,Collection绑定)
  • 大模型的开发应用(十):对话风格微调项目(上):数据工程与模型选型
  • 【SystemVerilog 2023 Std】第5章 词法约定 Lexical conventions (1)
  • Elasticsearch 常用命令(未完成)
  • MFCLIP模型实现通用扩散人脸伪造检测
  • java集合(八) ---- Vector 类
  • GPU服务器租赁服务商TOP9
  • Acrobat 首选项配置:从注册表到锁定机制