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

  • 相关阅读:
    Linux下tomcat中多项目配置druid报错的问题
    chrome实用快捷键速记
    count 与 group by
    H5相机上传图片压缩
    图片通过转base64上传
    内网之间访问
    composer 加载第三方类库
    访问一个项目生成两个session文件原因
    arttemplate.js 如何不直接输出html代码
    Tomcat 支持多少并发量
  • 原文地址:https://www.cnblogs.com/ruanjianlaowang/p/11644769.html
Copyright © 2011-2022 走看看