千家信息网

Gson序列化指定忽略字段的三种写法是什么

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,这篇文章主要讲解了"Gson序列化指定忽略字段的三种写法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Gson序列化指定忽略字段的三种写法是什么
千家信息网最后更新 2025年02月07日Gson序列化指定忽略字段的三种写法是什么

这篇文章主要讲解了"Gson序列化指定忽略字段的三种写法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Gson序列化指定忽略字段的三种写法是什么"吧!

目录
  • 1. transient关键字

  • 2. expose注解

  • 3. 自定义排查策略ExclusionStrategy

在我们日常使用json序列化框架过程中,经常会遇到在输出json字符串时,忽略某些字段,那么在Gson框架中,要想实现这种方式,可以怎么处理呢?

1. transient关键字

最容易想到的case,就是直接借助jdk的transient关键字来修饰不希望输出的对象,如

@Data@AllArgsConstructor@NoArgsConstructorpublic static class GItem {    private String user;    // @IgnoreField    private transient String pwd;}

上面的对象中,pwd前面使用transient进行修饰,那么在输出json串时,默认会忽略
@Test

public void testPrint() {    GItem item = new GItem("一灰灰", "yihui");    String ans = new Gson().toJson(item);    System.out.println(ans);}

输出如

{"user":"一灰灰"}

2. expose注解

借助gson提供的expose注解,也可以实现上面的case,如在需要保留的字段上添加@Expose

@Data@AllArgsConstructor@NoArgsConstructorpublic static class GItem {    @Expose    private String user;    // @IgnoreField    private String pwd;}

然后我们使用的地方,注意通过 GsonBuilder来创建Gson对象

@Testpublic void testPrint() {    GItem item = new GItem("一灰灰", "yihui");    String ans = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(item);    System.out.println(ans);}

上面这种使用姿势感觉有点怪怪的,在需要保留的字段上添加注解,这种使用方式并没有jackson的@JsonIgnore方式来得方便

3. 自定义排查策略ExclusionStrategy

除了上面两种方式之外,通过自定义的排除策略可以实现即使不修改bean,也能指定哪些字段不序列化
一个简单的demo如下,如果包含自定义的注解,则不序列化,或者field_name == pwd也不序列化

@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.TYPE})    @Retention(RetentionPolicy.RUNTIME)    @Documented    public @interface IgnoreField {}@Testpublic void testExclude() {    Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {        @Override        public boolean shouldSkipField(FieldAttributes fieldAttributes) {            if (fieldAttributes.getAnnotation(IgnoreField.class) != null) {                // 包含这个注解的,直接忽略                return true;            }            // 成员白名单            if (fieldAttributes.getName().equalsIgnoreCase("pwd")) {                return true;            }            return false;        }        @Override        public boolean shouldSkipClass(Class aClass) {            if (aClass.isAnnotationPresent(IgnoreField.class)) {                return true;            }            return false;        }    }).registerTypeAdapterFactory(new MyMapTypeAdapterFactory(new ConstructorConstructor(new HashMap<>()), false)).create();    GItem item = new GItem();    item.setUser("一灰灰");    item.setPwd("123456");    System.out.println(gson.toJson(item));}

上面这种姿势,更适用于有自定义需求场景的case,那么问题来了,如果我希望序列化的对象,并不是JOPO对象,比如传入的是一个Map,也希望针对某些key进行忽略,可以怎么整呢?

感谢各位的阅读,以上就是"Gson序列化指定忽略字段的三种写法是什么"的内容了,经过本文的学习后,相信大家对Gson序列化指定忽略字段的三种写法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

序列 字段 注解 对象 写法 方式 输出 关键 关键字 策略 学习 内容 姿势 就是 框架 问题 面的 名单 地方 场景 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 杭州金刚网络技术有限公司 尽调数据库 互联网科技股票投资范围 电脑软件开发教程手机版 cod16连接不上服务器更新 关于网络安全授权正确的做法是 常州加工软件开发方法 广西一站网络技术有限公司招聘 苹果查找未连接服务器 航天金控安全接入服务器地址 东南通信网络安全面试题 服务器安全狗设置服务器端口 网络安全已经呈现出哪些新趋势 苹果在贵州设立服务器 杭州言商网络技术有限公司 数据库系统与数据仓库系统 杭州4年软件开发工资 盐城网络安全主要什么软件 所能网络安全科技馆 软件开发的个人独资企业名称 网络安全绘画软件手机 生态环境局网络安全自查整改 网络安全的攻防报告 网络安全学院 7所 肇庆安卓软件开发定制 濮阳行业专业软件开发 蓝牙是无线网络技术吗 软件开发工程师待遇怎么样 cap网络技术 与软件开发有关的专业是什么
0