java 泛型转成json_java基础之泛型对象与json互转

本文介绍了在Java中如何将包含泛型的对象转换为JSON字符串,并从JSON字符串反序列化回泛型对象。通过使用阿里巴巴的Fastjson库,演示了在处理泛型时避免类型转换错误的方法。
摘要由CSDN通过智能技术生成

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值