Java實踐之路——Gson__Java

來源:互聯網
上載者:User

在java中採用ajax技術難免會遇到將java對象序列化的問題,而json作為一種輕量級且易懂易操作的資料格式得到廣泛的應用。所以,這裡我們講一下將Java對象序列化為Json資料的方法,這裡主要講一下google開發的開源工具Gson。


Gson繼承了Google的優良傳統,簡單易用。Gson這個Java類庫可以把Java對象轉換成JSON,也可以把JSON字串轉換成一個相等的Java對象。Gson支援任意複雜Java對象包括沒有原始碼的對象。 


這裡我們主要講一下Gson在序列化時一些需要注意的操作,一般的應用網上都有大量的資料,最好的方法還是查看API


我們這裡先寫個轉化為Json資料的通用工具類ConvertToJson.java

package meetyou.util;import java.lang.reflect.Type;import java.util.List;import com.google.gson.Gson;import com.google.gson.GsonBuilder;public class ConvertToJson {public static String toJsonWithGson(Object obj){Gson gson=new Gson();return gson.toJson(obj);}public static String toJsonWithGson(Object obj,Type type){Gson gson=new Gson();return gson.toJson(obj,type);}@SuppressWarnings("unchecked")public static String toJsonWithGson(List list){Gson gson=new Gson();return gson.toJson(list);}@SuppressWarnings("unchecked")public static String toJsonWithGson(List list,Type type){Gson gson=new Gson();return gson.toJson(list,type);}public static String toJsonWithGsonBuilder(Object obj){Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();return gson.toJson(obj);}public static String toJsonWithGsonBuilder(Object obj,Type type){Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();return gson.toJson(obj,type);}@SuppressWarnings("unchecked")public static String toJsonWithGsonBuilder(List list){Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();return gson.toJson(list);}@SuppressWarnings("unchecked")public static String toJsonWithGsonBuilder(List list,Type type){Gson gson=new GsonBuilder().setExclusionStrategies(new MyExclusionStrategy()).serializeNulls().create();return gson.toJson(list,type);}}

從代碼我們開始講

1、Gson如何使用。

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,代碼如下

package meetyou.util;import com.google.gson.ExclusionStrategy;import com.google.gson.FieldAttributes;public class MyExclusionStrategy implements ExclusionStrategy {private final Class<?> typeToSkip;public MyExclusionStrategy(){this.typeToSkip=null;}public MyExclusionStrategy(Class<?> typeToSkip) {this.typeToSkip = typeToSkip;}public boolean shouldSkipClass(Class<?> clazz) {return (clazz == typeToSkip);}public boolean shouldSkipField(FieldAttributes f) {return f.getAnnotation(NotSerialize.class) != null;}}
實現ExclusionStrategy介面

自己的註解介面NotSerialize,代碼如下

package meetyou.util;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD})public @interface NotSerialize {}
這時,我們用的時候,只要在不序列化的欄位前面加上@NotSerialize註解(比如說密碼欄位,保證其安全性就沒必要序列化出來了),採用new GsonBuilder().setExclusionStrategies()方法設定排除策略建立的Gson對象時,該欄位將不再被序列化


至於Gson的還原序列化,這裡就不講了。參考Gson API文檔吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.