• ResponseUtil jackson 转换问题;返回结果与 Bean 之间的转换,推荐使用convertValue


        /**
         * 若成功往往有data数据
         * 示例:
         *         UserBase userBase = new UserBase();
         *         userBase.setUserName("李昱鑫");
         *         userBase.setUserPwd("123");
         *         userBase.setUserAge(100);
         *        return ResponseUtil.okWithData(userBase); 对应结果1:
         *        return ResponseUtil.okWithData(objectMapper.writeValueAsString(userBase)); 对应结果2:
         *
         * 结果1:{"flag":true,"code":0,"msg":"ok","data":{"userName":"李昱鑫","userPwd":"123","userAge":100},"tkexp":false,"hurl":null,"time":"2019-12-31 08:19:25"}
         * 结果2:{"flag":true,"code":0,"msg":"ok","data":"{"userName":"李昱鑫","userPwd":"123","userAge":100}","tkexp":false,"hurl":null,"time":"2019-12-31 08:21:40"}
         * 这个为Object不再为String,若为String的话,当数据量非常多的时候,会产生很多转义字符,浪费网络流量,所以这里修改为object类型,其余的工作交给前端。
         * 使用方法要求如下:
         *   1.当是用到第三方的接口时的返回时,比如淘宝的API接口,返回值必须与文档上一致。那么需要传入字符串,淘宝的举例:return ResponseUtil.okWithData(rsp.getBody());
         *     虽然这样会产生很多的转义字符,但是没有办法,必须与文档的返回一致,这时data要传入String类型。
         *   2.当是我们自己调用我们自己的接口时,就没有必须传入String了,直接传入Object就可以了。举例:查询数据库中的记录,直接返回mybatis的mapper查询的结果list对象就可以,举例:
         *     Mapper.java里 -- List<JdpTbTrade> selectListByTids(String tids); Controller里 -- return ResponseUtil.okWithData(jdpTbTradeMapper.selectListByTids(tids));
         *     这样就减少了转义字符,前端调试看着也方便。
         */
        private Object data;

    问题1:这样返回的json 

    {"flag":true,"code":0,"msg":"ok","data":{"userName":"李昱鑫","userPwd":"123","userAge":100},"tkexp":false,"hurl":null,"time":"2019-12-31 08:19:25"}
    其它地方如何使用;
            //{"flag":true,"code":0,"msg":"ok","data":{"userName":"李某","userPwd":"123","userAge":100},"tkexp":false,"hurl":null,"time":"2019-12-31 08:19:25"}
            String json = "{"flag":true,"code":0,"msg":"ok","data":{"userName":"李某","userPwd":"123","userAge":100},"tkexp":false,"hurl":null,"time":"2019-12-31 08:19:25"}";
    
            //1.转成ResponseUtil
            ResponseUtil responseUtil = objectMapper.readValue(json, ResponseUtil.class);
    
    
            //使用方法1.取出data,由于是一个object对象,把这个对象转成string,然后再转成map进行使用
            Map<String, Object> map = objectMapper.readValue(objectMapper.writeValueAsString(responseUtil.getData()), Map.class);
            System.out.println(map.get("userName"));
    
    
            //使用方法2:取出data转换成String,然后再转成实体类
            UserBase userBase = objectMapper.readValue(objectMapper.writeValueAsString(responseUtil.getData()), UserBase.class);
            System.out.println(userBase.getUserName());
    
    
            //使用方法3:利用objectMapper直接转换成Map,显然这种方法更简洁,使用这种
            Map<String, Object> map2 = objectMapper.convertValue(responseUtil.getData(), Map.class);
            System.out.println(map2.get("userName"));
    
    
            //使用方法4:利用objectMapper直接转换成实体类,显然这种方法更简洁,使用这种,【推荐使用这种方式】
            UserBase userBase2 = objectMapper.convertValue(responseUtil.getData(), UserBase.class);
            System.out.println(userBase2.getUserName());
    
    
    
            return String.valueOf(map.get("userName"));
    
    

  • 相关阅读:
    Solr4.8.0源码分析(12)之Lucene的索引文件(5)
    JAVA基础(1)之hashCode()
    Solr4.8.0源码分析(11)之Lucene的索引文件(4)
    检查数据不一致脚本
    索引的新理解
    数据库放到容器里
    动态规划
    每天晚上一个动态规划
    postgresql parallel join example
    名不正,则言不顺
  • 原文地址:https://www.cnblogs.com/del88/p/12126572.html
Copyright © 2020-2023  润新知