In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-18 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/02 Report--
这篇文章主要讲解了"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序列化指定忽略字段的三种写法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.