在做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;
这样就可以解决对象字符串被转义的问题了