1. 場景描述
把泛型對象轉成字符串放到緩存中,獲取后使用有點問題,記錄下,有碰到的朋友,參考下。
2. 解決方案
2.1 操作類及說明
/**
* @auther: 軟件老王
*/
public static void main(String[] args) {
VO<UserParm> vo = new VO<UserParm>();
UserParm user = new UserParm();
user.setUserIdName("1111");
user.setMobilePhoneNo("2222");
vo.setData(user);
//正常情況
//1.對象轉json str
String str = JSONObject.toJSONString(vo);
System.out.println(str);
//2,json str 轉對象
VO vojs= JSONObject.parseObject(str,VO.class);
System.out.println(vojs);
//泛型 不能使用強轉,不管用,報錯
VO<UserParm> vojs2= JSONObject.parseObject(str,VO.class);
System.out.println(vojs2);
// System.out.println(vojs2.getData().getMobilePhoneNo());
//泛型,正常轉換
VO<UserParm> vojs3= JSONObject.parseObject(str,new TypeReference<VO<UserParm>>(){});
System.out.println(vojs3.getData().getMobilePhoneNo());
}
說明:
(1) 用的是阿里的fastjson,pom文件中增加下依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
(2)對象轉json格式str
String str = JSONObject.toJSONString(vo); //軟件老王
(3)json格式str轉對象
VO vojs= JSONObject.parseObject(str,VO.class); //軟件老王
(4)泛型的不一樣,轉換為泛型對象UserParm的時候會報錯。
System.out.println(vojs2.getData().getMobilePhoneNo());
com.alibaba.fastjson.JSONObject cannot be cast to com.laowang.spcrud.entity.UserPar
泛型的需要使用TypeReference才行:
VO<UserParm> vojs3= JSONObject.parseObject(str,new TypeReference<VO<UserParm>>(){});
(5)結果展示
com.laowang.spcrud.service.TestService
{"code":"0","data":{"mobilePhoneNo":"2222","userIdName":"1111"}}
com.laowang.spcrud.entity.VO@368239c8
com.laowang.spcrud.entity.VO@9e89d68
2222
Process finished with exit code 0
2.2 兩個對象類
(1)泛型類VO
package com.laowang.spcrud.entity;
import java.io.Serializable;
/**
* @auther: 軟件老王
*/
public class VO<T> implements Serializable {
public static final String SUCCESS = "0";
public static final String FAIL = "1";
private static final long serialVersionUID = 1L;
private String code = SUCCESS;
private String msg;
private T data;
public static String getSUCCESS() {
return SUCCESS;
}
public static String getFAIL() {
return FAIL;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
(2)實體類UserParm
package com.laowang.spcrud.entity;
import java.io.Serializable;
/**
* @auther: 軟件老王
*/
public class UserParm implements Serializable {
private static final long serialVersionUID = 1L;
private String mobilePhoneNo;
private String email;
private String uid;
private String userIdName;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getMobilePhoneNo() {
return mobilePhoneNo;
}
public void setMobilePhoneNo(String mobilePhoneNo) {
this.mobilePhoneNo = mobilePhoneNo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUserIdName() {
return userIdName;
}
public void setUserIdName(String userIdName) {
this.userIdName = userIdName;
}
}
I’m 「軟件老王」,如果覺得還可以的話,關注下唄,后續更新秒知!歡迎討論區、同名公眾號留言交流!