含有泛型的JSON字符串反序列化

372 阅读1分钟

我们在调用三方API接口时,三方API通常有固定的返回结果格式。如下是一个简单的返回结果对象:

 package wanggc.json;
 ​
 import lombok.Data;
 ​
 @Data
 public class Result<T> {
     /** 状态码 */
     private Integer code;
     /** 状态 */
     private Boolean success;
     /** 返回消息 */
     private String msg;
     /** 数据 */
     private T data;
 }

返回数据是个对象

返回数据:

 {
   "code": 10000,
   "success": true,
   "msg": "token初始化成功",
   "data": {
     "expire": 80215,
     "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJiM",
     "type": "free"
   }
 }

数据对象:

 package wanggc.json;
 ​
 import lombok.Data;
 ​
 @Data
 public class TokenInfo {
     /** 过期时间 */
     private Long expire;
     /** Token */
     public String token;
     /** 类型 */
     private String type;
 }

反序列化示例代码:

 String content = ResourceUtil.readUtf8Str("object.json");
 Type type = new TypeToken<Result<TokenInfo>>(){}.getType();
 Result<TokenInfo> result = new Gson().fromJson(content, type);

返回数据是个列表

返回数据:

 {
   "code": 30000,
   "success": true,
   "msg": "获取BOX成功",
   "data": [
     {
       "boxId": "16f8cf7e1c6848bc83872ffcd5d328f9",
       "name": "BOX1",
       "serlnum": "110000089149",
       "status": "1",
       "projectType": "0"
     }
   ]
 }

数据对象

 package wanggc.json;
 ​
 import lombok.Data;
 ​
 @Data
 public class Box {
   /**
    * BOXID
    */
   private String boxId;
   /**
    * 名称
    */
   private String name;
   /**
    * 项目类型:0:自由项目,1:模板项目
    */
   private String projectType;
   /**
    * 序列号
    */
   private String serlnum;
   /**
    * 状态
    */
   private String status;
 }

反序列化示例代码:

 String content2 = ResourceUtil.readUtf8Str("list.json");
 Type type2 = new TypeToken<Result<List<Box>>>(){}.getType();
 Result<List<Box>> result2 = new Gson().fromJson(content2, type2);

\