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对象是如何创建的

相关文章
|
JSON fastjson Java
FastJson、JackJson 以及 Gson 的区别
FastJson、JackJson 以及 Gson 是 Java 生态圈中三种常用的 Json 解析器,它们均可将 Java 对象序列化为 Json 格式的字符串,也可将 Json 字符串反序列化为 Java 对象。下面我们讨论一下三者在序列化和反序列化操作中的一些区别。
1175 0
|
1月前
|
消息中间件 JSON Java
Gson:备胎alternate的版本问题
Gson:备胎alternate的版本问题
|
6月前
|
JSON fastjson Java
Gson与FastJson详解
综上,Gson和FastJson都是用于Java对象和JSON数据互相转换的优秀库,选择哪个取决于性能、功能需求和个人偏好。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
97 2
|
JSON Java API
Gson基本使用
Gson基本使用
132 0
|
JSON 安全 fastjson
gson与fastjson
gson与fastjson
121 0
|
JSON Java API
Gson-更新中
Gson-更新中
197 0
|
JSON fastjson Java
scala使用Gson和FastJson解析JSON
kafka传过来的数据好多都是JSON格式,需要对其解析,抽取出应用需要的数据。Gson和FastJson是两个不错的解析工具,以后可能经常会使用到,记录一下,防止以后遗忘。
946 0
|
JSON 数据可视化 fastjson
Gson 简单使用姿势小结
关于 Json 序列化的框架可以说比较多了,比如 Spring 默认的 Jackson,国内互联网用的比较多的 FastJson,本文则主要介绍一下 Gson 的简单使用姿势,并不会涉及到不同的 json 框架的性能对比
218 0
Gson 简单使用姿势小结
|
JSON 前端开发 JavaScript
JSON解析教程(Gson、FastJson、Jackson)
JSON解析教程(Gson、FastJson、Jackson)
JSON解析教程(Gson、FastJson、Jackson)
|
JSON 数据格式
GSON - 基础篇
GSON - 基础篇
204 0