测试的pojo
public class User{
public String name;
public int age;
public Date date;
}
需求
1.当pojo类中有int类型,但是前端获得的json数据为age为空的情况下
String json="{\"name\":\"zhangsan\",\"age\":\"\"}";
Gson gson=new GsonBuilder().registerTypeAdapter(int.class, new JsonDeserializer<Integer>() {
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
try {
return json.getAsInt();
} catch (Exception e) {
return 0;
}
}
}).create();
User user=gson.fromJson(json, User.class);
System.out.println(user.age);
2.序列化时为null值的输出
User user=new User("zhangsan",60);
Gson gson=new GsonBuilder.serializeNulls().create();
System.out.println(json.toJson(user));
3.有时间参数序列化时格式化输出
User user=new User();
user.date=new Date();
Gson gson=new GsonBuilder.setDateFormat("yyyy-MM-dd").create();
System.out.println(gson.toJson(user));
4.注解@SerializedName
为user类中的age添加
@SerializedName ("myAge")
public int age;
之后输出Json数据
User user=new User();
user.age=10;
Gson gson=new Gson();
System.out.println(gson.toJson(user));
5.jsonBuilder配合@Expose,pojo添加这个标签标示支持序列化和反序列化
User user=new User("zhangsan", 20);
user.date=new Date();
Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(gson.toJson(user));
pojo类中为
@Expose public String name
观察结果发现只输出了name:zhangsan。