zoukankan      html  css  js  c++  java
  • 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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11644769.html
Copyright © 2011-2022 走看看