Java实践之路——Gson

Java实践之路——Gson

分类: java javascript   413人阅读  评论(0)  收藏  举报

在java中采用ajax技术难免会遇到将java对象序列化的问题,而json作为一种轻量级且易懂易操作的数据格式得到广泛的应用。所以,这里我们讲一下将Java对象序列化为Json数据的方法,这里主要讲一下google开发的开源工具Gson。

Gson继承了谷歌的优良传统,简单易用。Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。 

这里我们主要讲一下Gson在序列化时一些需要注意的操作,一般的应用网上都有大量的资料,最好的方法还是查看API

我们这里先写个转化为Json数据的通用工具类ConvertToJson.java

  1. package meetyou.util;  
  2.   
  3. import java.lang.reflect.Type;  
  4. import java.util.List;  
  5.   
  6. import com.google.gson.Gson;  
  7. import com.google.gson.GsonBuilder;  
  8.   
  9. public class ConvertToJson {  
  10.     public static String toJsonWithGson(Object obj)  
  11.     {  
  12.         Gson gson=new Gson();  
  13.         return gson.toJson(obj);  
  14.     }  
  15.     public static String toJsonWithGson(Object obj,Type type)  
  16.     {  
  17.         Gson gson=new Gson();  
  18.         return gson.toJson(obj,type);  
  19.     }  
  20.     @SuppressWarnings("unchecked")  
  21.     public static String toJsonWithGson(List list)  
  22.     {  
  23.         Gson gson=new Gson();  
  24.         return gson.toJson(list);  
  25.     }  
  26.     @SuppressWarnings("unchecked")  
  27.     public static String toJsonWithGson(List list,Type type)  
  28.     {  
  29.         Gson gson=new Gson();  
  30.         return gson.toJson(list,type);  
  31.     }  
  32.       
  33.     public static String toJsonWithGsonBuilder(Object obj)  
  34.     {  
  35.         Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();  
  36.         return gson.toJson(obj);  
  37.     }  
  38.     public static String toJsonWithGsonBuilder(Object obj,Type type)  
  39.     {  
  40.         Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();  
  41.         return gson.toJson(obj,type);  
  42.     }  
  43.     @SuppressWarnings("unchecked")  
  44.     public static String toJsonWithGsonBuilder(List list)  
  45.     {  
  46.         Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();  
  47.         return gson.toJson(list);  
  48.     }  
  49.     @SuppressWarnings("unchecked")  
  50.     public static String toJsonWithGsonBuilder(List list,Type type)  
  51.     {  
  52.         Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();  
  53.         return gson.toJson(list,type);  
  54.     }  
  55. }  

从代码我们开始讲

1、Gson如何使用。

扫描二维码关注公众号,回复: 708492 查看本文章

Gson对象主要有两个方法toJson()序列化,fromJson()反序列化

2、如何获取Gson对象

两种方式,1、new Gson().2、new GsonBuilder().create();

3、两种方式获取gson对象的区别

利用GsonBuilder创建gson对象时,可以增加一些特殊处理,应该说是比第一种方式功能更强大

4、参数中的type如何创建

(1)、普通对象,如User user=new User();得到type方式,user.class

(2)、复杂点的对象,如List<User> users=new ArrayList<User>();得到type方式,new com.google.gson.reflect.TypeToken<List<User>>(){}.getType()

5、GsonBuilder有哪些优势

(1)、可以采用注解的方式,个性化定制需要序列化和方序列化的字段,如在字段前面添加@Expose注解,当采用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法时,没有该注解的字段将被排除在外。其他注解还有@SerializeName、@Since和@Until,具体意思参见Gson API文档

(2)、定制自己的注解和排除策略。如上述代码中的类 MyExclusionStrategy,代码如下

  1. package meetyou.util;  
  2.   
  3. import com.google.gson.ExclusionStrategy;  
  4. import com.google.gson.FieldAttributes;  
  5.   
  6. public class MyExclusionStrategy implements ExclusionStrategy {  
  7.   
  8.     private final Class<?> typeToSkip;  
  9.       
  10.     public MyExclusionStrategy(){  
  11.         this.typeToSkip=null;  
  12.     }  
  13.       
  14.     public MyExclusionStrategy(Class<?> typeToSkip) {  
  15.         this.typeToSkip = typeToSkip;  
  16.     }  
  17.       
  18.     public boolean shouldSkipClass(Class<?> clazz) {  
  19.         return (clazz == typeToSkip);  
  20.     }  
  21.   
  22.     public boolean shouldSkipField(FieldAttributes f) {  
  23.         return f.getAnnotation(NotSerialize.class) != null;  
  24.     }  
  25.   
  26. }  
实现ExclusionStrategy接口

自己的注解接口NotSerialize,代码如下

  1. package meetyou.util;  
  2.   
  3. import java.lang.annotation.ElementType;  
  4. import java.lang.annotation.Retention;  
  5. import java.lang.annotation.RetentionPolicy;  
  6. import java.lang.annotation.Target;  
  7.   
  8. @Retention(RetentionPolicy.RUNTIME)  
  9. @Target({ElementType.FIELD})  
  10. public @interface NotSerialize {  
  11.   
  12. }  
这时,我们用的时候,只要在不序列化的字段前面加上@NotSerialize注解(比如说密码字段,保证其安全性就没必要序列化出来了),采用new GsonBuilder().setExclusionStrategies()方法设置排除策略创建的Gson对象时,该字段将不再被序列化

至于Gson的反序列化,这里就不讲了。参考Gson API文档吧

猜你喜欢

转载自lvdong5830.iteye.com/blog/1336217