天天看點

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 「軟體老王」,如果覺得還可以的話,關注下呗,後續更新秒知!歡迎讨論區、同名公衆号留言交流!

更多資訊請關注公衆号:「軟體老王」,關注不迷路,IT技術與相關幹貨分享,回複關鍵字擷取對應幹貨,本文版權歸作者軟體老王所有,轉載需注明作者、超連結,否則保留追究法律責任的權利。

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