写点什么

com.alibaba.fastjson 对象转 json 剔除字段

  • 2022 年 9 月 26 日
    北京
  • 本文字数:725 字

    阅读完需:约 2 分钟

com.alibaba.fastjson 对象转json剔除字段

问题背景描述

java 代码保存数据到 mysql 的同时需要保存一份到 es,由于对象字段很多,建两个实体类分别写值保存到 mysql、es 的话会比较繁琐,简单的方法就是公用一个实体类,通过 fastjson 将对象转成 json 存储到 es,在对象转 json 的过程中,由于实体类本身继承了父类中的字段属性,对于 mysql 没有影响,insert 时对应字段不保存即可,但是 es 的话即使已经建好了表结构(索引),如果数据中有新增字段,es 会自动增加字段,导致 es 原有的表结构(索引)遭到破坏,那么这就需要在对象转 json 的过程中去掉没必要的字段,保证原始 es 索引结构的统一。

问题处理

这里展示部分过滤代码供大家参考

//返回结果有值,提前准备 对象转json 需要过滤的参数SimplePropertyPreFilter filter = new SimplePropertyPreFilter();Set<String> excludes = filter.getExcludes();excludes.add("createBy");excludes.add("createTime");excludes.add("params");excludes.add("remark");excludes.add("searchValue");excludes.add("updateBy");excludes.add("updateTime");SerializeFilter[] filters = {filter};......//保存数据到es 转jsonString data = JSON.toJSONString(meiqiaConversation,filters,SerializerFeature.WriteMapNullValue);......      
复制代码

这样就可以去掉不必要的的字段了,下面贴两幅图比较一下,其中第一幅图是没有过滤非 es 索引字段时 es 中自动生成的索引结构,其实这部分字段不是手工创建 es 索引时添加的,而是实体类在转 json 时自动将父类中对应的字段加入时导致的


第二幅图就是添加了上述代码之后,重新建 es 索引,再通过程序写入数据时,由于过滤了不必要的字段之后存储的数据,数据结构如图


对比上图已经没有第一幅图红框中标出的字段属性了,达到了我们想要的效果。

发布于: 刚刚阅读数: 3
用户头像

让技术不再枯燥,让每一位技术人爱上技术 2022.07.22 加入

还未添加个人简介

评论

发布
暂无评论
com.alibaba.fastjson 对象转json剔除字段_问题处理_六月的雨在InfoQ_InfoQ写作社区