1. 场景描述
把泛型对象转成字符串放到缓存中,获取后使用有点问题,记录下,有碰到的朋友,参考下。
2. 解决方案
2.1 操作类及说明
/**
* @auther: 软件老王
*/
public static void main(String[] args) {
VO vo = new VO();
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 vojs2= JSONObject.parseObject(str,VO.class);
System.out.println(vojs2);
// System.out.println(vojs2.getData().getMobilePhoneNo());
//泛型,正常转换
VO vojs3= JSONObject.parseObject(str,new TypeReference>(){});
System.out.println(vojs3.getData().getMobilePhoneNo());
}
说明:
(1) 用的是阿里的fastjson,pom文件中增加下依赖
com.alibaba
fastjson
1.2.46
(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 vojs3= JSONObject.parseObject(str,new TypeReference>(){});
(5)结果展示
com.laowang.spcrud.service.TestService
{"code":"0","data":{"mobilePhoneNo":"2222","userIdName":"1111"}}
[email protected]
[email protected]
2222
Process finished with exit code 0
2.2 两个对象类
(1)泛型类VO
package com.laowang.spcrud.entity;
import java.io.Serializable;
/**
* @auther: 软件老王
*/
public class VO 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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!
原文:https://www.cnblogs.com/ruanjianlaowang/p/11644769.html