前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

gson坑

作者头像
阿超
发布2022-08-16 19:13:43
6620
发布2022-08-16 19:13:43
举报
文章被收录于专栏:快乐阿超

一直只做自己会做的,就什么也做不成。最重要的是,你自己有没有兴趣——《碧蓝之海》

前两天使用Gson中遇到一个坑

同事使用

代码语言:javascript
复制
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

创建gson对象

所以到我这,出现了字段不序列化,或者反序列化不了的问题

例如下面这个类

代码语言:javascript
复制
@Data
public static class User implements Serializable {
    private static final long serialVersionUID = 509877226276918727L;
    @Expose
    private String firstName;
    @Expose(serialize = false)
    private String lastName;
    @Expose(serialize = false, deserialize = false)
    private String emailAddress;
    private String password;
}

使用以下代码进行序列化

代码语言:javascript
复制
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
User user = new User();
user.setFirstName("Supa");
user.setLastName("Hino");
user.setEmailAddress("achao1441470436@gmail.com");
user.setPassword("39a8456c26584ba987d4a9f1f8f75fc1");
String userJson = gson.toJson(user);
System.out.println(userJson);

输出结果为

代码语言:javascript
复制
{"firstName":"Supa"}

可以看到只有firstName被序列化了

这是因为我们只有firstName上加了@Expose并且serialize值为true

如果没有这个注解或者serializefalse时,它就不会被序列化

但注意还有个属性deserialize,当它为false时,反序列化json到对象时,会过滤该属性

例如我使用这段json去反序列化

代码语言:javascript
复制
{
    "firstName": "Supa",
    "lastName": "Hino",
    "emailAddress": "achao1441470436@gmail.com",
    "password": "39a8456c26584ba987d4a9f1f8f75fc1"
}
代码语言:javascript
复制
String myJson = "{\"firstName\":\"Supa\",\"lastName\":\"Hino\",\"emailAddress\":\"achao1441470436@gmail.com\",\"password\":\"39a8456c26584ba987d4a9f1f8f75fc1\"}";
User myUser = gson.fromJson(myJson, User.class);
System.out.println(myUser);

输出结果

代码语言:javascript
复制
User(firstName=Supa, lastName=Hino, emailAddress=null, password=null)

所以在使用Gson的时候,一定要注意Gson对象是如何创建的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档