java返回json請求中文變成問號的問題及解決
java返回json請求中文變成問號
原來在個人項目時,用layui的數據表格獲取數據時,不會出現中文變問號問題
後來換瞭個項目,發現返回的json數據到頁面中文變成瞭???問號。
於是開始排查問題出現的原因,首先jsp頁面頭部確保使用瞭UTF-8編碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
既然不是頁面的問題,肯定就是後臺問題,之前的後臺代碼是:
/** * 獲取json列表 */ @ResponseBody @RequestMapping("/getJsonAF02") public void getManyCategory(Page page, HttpServletRequest request,HttpServletResponse response) throws Exception{ logBefore(logger, "列表AF02"); // if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} // //校驗權限 PageData pd = this.getPageData(); JSONObject jsonObject = new JSONObject(); PrintWriter out = response.getWriter(); try { page.setPd(pd); page.setCurrentPage(Integer.parseInt(pd.getString("page"))); pd.put("OPERATION_NUM", "10001"); List<PageData> varList = af02Service.listForSCJ(page); // 列出AF02列表 //前臺通過key值獲得對應的value值 jsonObject.put("code", 0); jsonObject.put("msg", "測試"); jsonObject.put("count",page.getTotalResult()); jsonObject.put("data", varList); } catch (Exception e) { logger.error(e.toString(), e); } String result = jsonObject.toString(); out.write(result); out.close(); }
排查瞭一下,發現在這段代碼上加上response.setContentType("text/html;charset=utf-8");:
/** * 獲取json列表 */ @ResponseBody @RequestMapping("/getJsonAF02") public void getManyCategory(Page page, HttpServletRequest request,HttpServletResponse response) throws Exception{ logBefore(logger, "列表AF02"); // if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} // //校驗權限 PageData pd = this.getPageData(); response.setContentType("text/html;charset=utf-8");// 加上這個處理問號 JSONObject jsonObject = new JSONObject(); PrintWriter out = response.getWriter(); try { page.setPd(pd); page.setCurrentPage(Integer.parseInt(pd.getString("page"))); pd.put("OPERATION_NUM", "10001"); List<PageData> varList = af02Service.listForSCJ(page); // 列出AF02列表 //前臺通過key值獲得對應的value值 jsonObject.put("code", 0); jsonObject.put("msg", "測試"); jsonObject.put("count",page.getTotalResult()); jsonObject.put("data", varList); } catch (Exception e) { logger.error(e.toString(), e); } String result = jsonObject.toString(); out.write(result); out.close(); }
傳到頁面就不會出現中文亂碼瞭
原來的後來的項目的springmvc配置文件裡面沒有相關的配置,之前的個人項目上有這段配置:
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
嗯,算是踩瞭個坑,分享一下
json返回中文全是問號
在RequestMapping裡加上
produces = "text/plain;charset=UTF-8"
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 如何實現springboot中controller之間的相互調用
- 關於mybatis調用存儲過程獲取返回值問題
- java鏈式創建json對象的實現
- 淺談StringEntity 和 UrlEncodedFormEntity之間的區別
- 使用java生成json時產生棧溢出錯誤問題及解決方案