/** * 若成功往往有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"));