GSON的简单使用示例

package test.zhizhi;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 *
 * @ClassName Item
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime 2017/12/05 16:53:23
 * @Description 数据填充项
 */
public class Item {
    private Long id;
    private String name;
    private String code;
    private Long category;

    /**
     *
     * @author xuepeng
     * @CreateTime 2017/12/05 16:53:23
     */
    public Item() {
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Item other = (Item) obj;
        if (category == null) {
            if (other.category != null) {
                return false;
            }
        } else if (!category.equals(other.category)) {
            return false;
        }
        if (code == null) {
            if (other.code != null) {
                return false;
            }
        } else if (!code.equals(other.code)) {
            return false;
        }
        if (id == null) {
            if (other.id != null) {
                return false;
            }
        } else if (!id.equals(other.id)) {
            return false;
        }
        if (name == null) {
            if (other.name != null) {
                return false;
            }
        } else if (!name.equals(other.name)) {
            return false;
        }
        return true;
    }

    /**
     * @return the category
     */
    public Long getCategory() {
        return category;
    }

    /**
     * @return the code
     */
    public String getCode() {
        return code;
    }

    /**
     * @return the id
     */
    public Long getId() {
        return id;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((category == null) ? 0 : category.hashCode());
        result = prime * result + ((code == null) ? 0 : code.hashCode());
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    /**
     * @param category the category to set
     */
    public void setCategory(Long category) {
        this.category = category;
    }

    /**
     * @param code the code to set
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * @param id the id to set
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        // Gson gson = new GsonBuilder().setPrettyPrinting().create();
        Gson gson = new GsonBuilder().create();
        return gson.toJson(this);
    }

}
package test.zhizhi;

/**
 *
 * @ClassName Result
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime 2017/12/05 16:40:23
 * @Description 结果包装类
 */
public class Result<T> {
    private static final int SUCCESS_RESULT = 1;
    private static final String SUCCESS_CODE = "SUCCESS";
    private static final String SUCCESS_MESSAGE = "成功";

    private Integer result;
    private String code;
    private String message;
    private T data;

    /**
     *
     * @author xuepeng
     * @CreateTime 2017/12/05 16:40:23
     */
    public Result() {
    }

    public static <T> Result<T> success(T data) {
        Result<T> rs = new Result<T>();
        rs.setResult(SUCCESS_RESULT);
        rs.setCode(SUCCESS_CODE);
        rs.setMessage(SUCCESS_MESSAGE);
        rs.setData(data);
        return rs;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        Result<?> other = (Result<?>) obj;
        if (code == null) {
            if (other.code != null) {
                return false;
            }
        } else if (!code.equals(other.code)) {
            return false;
        }
        if (data == null) {
            if (other.data != null) {
                return false;
            }
        } else if (!data.equals(other.data)) {
            return false;
        }
        if (message == null) {
            if (other.message != null) {
                return false;
            }
        } else if (!message.equals(other.message)) {
            return false;
        }
        if (result == null) {
            if (other.result != null) {
                return false;
            }
        } else if (!result.equals(other.result)) {
            return false;
        }
        return true;
    }

    /**
     * @return the code
     */
    public String getCode() {
        return code;
    }

    /**
     * @return the data
     */
    public T getData() {
        return data;
    }

    /**
     * @return the message
     */
    public String getMessage() {
        return message;
    }

    /**
     * @return the result
     */
    public Integer getResult() {
        return result;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((code == null) ? 0 : code.hashCode());
        result = prime * result + ((data == null) ? 0 : data.hashCode());
        result = prime * result + ((message == null) ? 0 : message.hashCode());
        result = prime * result + ((this.result == null) ? 0 : this.result.hashCode());
        return result;
    }

    /**
     *
     * @return 是否成功
     * @author xuepeng
     * @CreateTime 2017/12/05 17:16:57
     * @Description 判断当前的返回结果是否成功
     */
    public boolean isSuccess() {
        return SUCCESS_RESULT == this.result.intValue();
    }

    /**
     * @param code the code to set
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * @param data the data to set
     */
    public void setData(T data) {
        this.data = data;
    }

    /**
     * @param message the message to set
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * @param result the result to set
     */
    public void setResult(Integer result) {
        this.result = result;
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Result [result=" + result + ", code=" + code + ", message=" + message + ", data=" + data
                + "]";
    }

}
package test.zhizhi;

import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

/**
 *
 * @ClassName JSONExample
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime 2017/12/05 16:36:27
 * @Description JSON示例.
 * 
 * 
 *              pom.xml
 *              <dependency>
 *              <groupId>com.google.code.gson</groupId>
 *              <artifactId>gson</artifactId>
 *              <version>2.2.2</version>
 *              </dependency>
 * 
 *              <dependency>
 *              <groupId>com.google.guava</groupId>
 *              <artifactId>guava</artifactId>
 *              <version>23.0</version>
 *              </dependency>
 */
public class JSONExample {

    /**
     *
     * @param args
     * @author xuepeng
     * @CreateTime 2017/12/05 16:36:27
     * @Description
     */
    public static void main(String[] args) {
        JSONExample example = new JSONExample();

        // 生成模拟数据,模拟HTTP request返回的json结构字符串
        long size = 10L;
        List<Item> items = example.createItems(size);
        Result<List<Item>> result = example.createResult(items);
        String json = example.toJSON(result);

        System.out.println(String.format("get some json data from HTTP request:\n%s", json));

        // 开始解析json结构字符串
        // 1、判断返回的key 是否都存在。如果解析不抛出异常,那么就验证了该问题
        Result<List<Item>> rs = example.fromJSON(json);

        if (rs.isSuccess()) {
            List<Item> datas = rs.getData();
            // 2. data 中,数组的个数
            System.out.println("data's size : " + datas.size());
            for (Item item : datas) {
                // 3、每个数组总的key and value
                System.out.println(item);
            }
        } else {
            System.err.println(
                    String.format("ERROR: some exception occured. error message is: %s", rs.getMessage()));
        }

    }

    private List<Item> createItems(Long size) {
        List<Item> items = Lists.newArrayList();
        for (long i = 0; i < size; i++) {
            Item item = new Item();
            item.setId(i);
            item.setName("name-" + i);
            item.setCode("code-" + i);
            item.setCategory(i + 2L);
            items.add(item);
        }
        return items;
    }

    private Result<List<Item>> createResult(List<Item> items) {
        Result<List<Item>> rs = Result.success(items);
        return rs;
    }

    private Result<List<Item>> fromJSON(String json) {
        Gson gson = new GsonBuilder().create();
        Type type = new TypeToken<Result<List<Item>>>() {
        }.getType();
        Result<List<Item>> rs = gson.fromJson(json, type);
        return rs;
    }

    private String toJSON(Object obj) {
        // setPrettyPrinting() 的作用是格式化json结构,使其方便人眼来阅读。线上环境应该去掉,它会增加性能消耗
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(obj);
    }

}

猜你喜欢

转载自kanpiaoxue.iteye.com/blog/2403829