gson坑

简介: gson坑

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

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

同事使用

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

创建gson对象

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

例如下面这个类

@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;
}

使用以下代码进行序列化

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);

输出结果为

{"firstName":"Supa"}

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

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

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

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

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

{
    "firstName": "Supa",
    "lastName": "Hino",
    "emailAddress": "achao1441470436@gmail.com",
    "password": "39a8456c26584ba987d4a9f1f8f75fc1"
}


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

输出结果

User(firstName=Supa, lastName=Hino, emailAddress=null, password=null)

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

相关文章
|
关系型数据库 Serverless 分布式数据库
1.4亿人都在用|伊对APP x 阿里云PolarDB:这一对,天生配
PolarDB以其出色的性能和稳定性为伊对APP提供了强大的支持
1.4亿人都在用|伊对APP x 阿里云PolarDB:这一对,天生配
|
存储 网络协议 Ubuntu
如何在Ubuntu安装配置SVN服务端并实现无公网ip访问内网资料库
如何在Ubuntu安装配置SVN服务端并实现无公网ip访问内网资料库
424 0
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
10172 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
消息中间件 存储 NoSQL
国产化中间件正在侵蚀开源中间件
国产化中间件正在侵蚀开源中间件
2025 7
|
运维 监控 程序员
Go 服务自动收集线上问题现场
Go 服务自动收集线上问题现场
|
JSON API 数据库
使用现代方式定义接口
【5月更文挑战第14天】FastAPI是一个现代化的、基于类型的web框架,用于构建API。它支持自动补全和类型检查,提供数据校验并能自动生成清晰的错误消息。 它基于OpenAPI标准,能自动生成交互式Swagger UI和ReDoc文档。 FastAPI内置安全性特性,支持身份验证,如HTTP基本认证和OAuth2。依赖注入系统使得复杂逻辑易于管理,同时兼容Starlette,具备高性能、WebSocket和GraphQL支持。
283 0
|
消息中间件 RocketMQ 微服务
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)(下)
分布式事物【Hmily实现TCC分布式事务、Hmily实现TCC事务、最终一致性分布式事务解决方案】(七)-全面详解(学习总结---从入门到深化)
338 1
|
Go
Go 通过结构体指定字段进行排序
Go 通过结构体指定字段进行排序
509 0
Go 通过结构体指定字段进行排序
|
SQL 关系型数据库 MySQL
关于mysql的cpu占用高的问题
关于mysql的cpu占用高的问题
|
计算机视觉 Python
openCV的trackbar调色板
openCV的trackbar调色板
134 1