問題描述-
今天寫了一些代碼,功能大概前端發送Ajax請求,后端查詢數據庫后將結果數組封裝成Json字符串格式返回頁面。對Json的處理使用的類庫為Jackson。
后台代碼無報錯,控制台打印查詢結果列表顯示正常。
頁面無法正常解析Json,打開瀏覽器控制台查看response數據,顯示json中的"被轉義成了\",導致錯誤。
問題分析-
數據庫查詢結果打印出來無異常,傳遞到前台時json有問題,說明問題出在將結果list處理成json這一步。遂查看處理代碼
ObjectMapper objectMapper=new ObjectMapper(); String categoriesString=null; try { categoriesString=objectMapper.writeValueAsString(categories); System.out.println("MSG:[categorys/json]="+categories.toString()); } catch (JsonProcessingException e) { e.printStackTrace(); } resp.setContentType("application/json;charset=utf-8"); objectMapper.writeValue(resp.getWriter(),categoriesString);
其中MSG的打印也時正常,說明問題出現在這一句:
objectMapper.writeValue(resp.getWriter(),categoriesString);
問題解決-
方法有二:其一時繼續使用writeValueAsString轉換成字符串后直接使用response流返回:
categoriesString=objectMapper.writeValueAsString(categories); resp.setContentType("application/json;charset=utf-8"); resp.getWriter().write(categoriesString);
其二是不適用writeValueAsString轉換字符串,直接調用方法writeValue,第二個參數傳遞list數組即可:
resp.setContentType("application/json;charset=utf-8"); objectMapper.writeValue(resp.getOutputStream(),categories);