在做Zuul網關日志處理的時候,有以下需求:
(1)記錄請求成功的日志,要求記錄請求返回的結果。
遇到的問題:
(1)當請求的結果事對象時,會將其轉成字符串,在put進map的時候,字符串就會被轉義
(2)請求的結果不一定的對象,也可能時數字或者字符串
public static String getObjectStr(){ Map<String,Object> param = new HashMap<>(); param.put("name", "zhangsan"); param.put("age", 18); return JSONObject.toJSONString(param); } public static void main(String[] args) { String paramStr = getObjectStr();//模擬獲取請求的 結果 Map<String,Object> result = new HashMap<>(); result.put("code", 200); result.put("body", paramStr); System.out.println(JSONObject.toJSON(result)); }
解決方法:
(1)對獲取到的結果字符串嘗試進行JSONObject解析,若解析成功,就將該對象put進map;若解析不成功,就直接獲取到的字符串。例:
public static String getObjectStr(){ Map<String,Object> param = new HashMap<>(); param.put("name", "zhangsan"); param.put("age", 18); return JSONObject.toJSONString(param); } public static void main(String[] args) { String paramStr = getObjectStr();//模擬獲取請求的 結果 Map<String,Object> result = new HashMap<>(); result.put("code", 200); try { result.put("body", JSONObject.parse(paramStr)); } catch (Exception e) { result.put("body", paramStr); } System.out.println(JSONObject.toJSON(result)); }
JSONObject:import com.alibaba.fastjson.JSONObject;
這樣就可以解決對象字符串被轉義的問題了