Java实践之路——Gson
来源:互联网 发布:毕加索知乎 编辑:程序博客网 时间:2024/05/21 11:09
在java中采用ajax技术难免会遇到将java对象序列化的问题,而json作为一种轻量级且易懂易操作的数据格式得到广泛的应用。所以,这里我们讲一下将Java对象序列化为Json数据的方法,这里主要讲一下google开发的开源工具Gson。
Gson继承了谷歌的优良传统,简单易用。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;
- }
- }
自己的注解接口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 {
- }
- Java实践之路——Gson
- Java实践之路——Gson
- Java实践之路——JavaMail
- Java实践之路——线程
- Java实践之路——流
- Java实践之路——WebService
- 【Gson】Json转换器之Gson——项目实战
- Google Gson实践2—对数组的操作
- Java实践之路——jsp+servelt+javabean
- Java实践之路——EJB(一)
- Java实践之路——集合类
- Java多线程实践之—同步篇
- Java多线程实践之—终结
- Java多线程实践之—协作
- JSON教程之GSON基本解析(Gson-Java)
- JSON教程之GSON基本解析(Java-Gson)
- Java实践之路目录索引
- Gson——Gson序列化
- SQL Server 解决 "无法执行该操作,因为链接服务器 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务"
- UltraEdit破解[转载]
- ioctl实现的打印终端窗口大小
- php date
- Class Diagram(类图)——UML
- Java实践之路——Gson
- Linux下软件的命令行安装
- 如何利用史密斯圆图匹配阻抗
- 解决在JBoss 下不能找到 Action 问题
- C语言,C++和java中“指针”用法深入剖析
- C#基础
- SQL 在OPENQUERY中使用参数
- YII缓存的使用方法
- Jython_Using Jython in an IDE