java基礎之泛型對象與json互轉


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 「軟件老王」,如果覺得還可以的話,關注下唄,后續更新秒知!歡迎討論區、同名公眾號留言交流!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM