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"));

 

 
         
         
        

 


免責聲明!

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



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