java返回json請求中文變成問號的問題及解決
java返回json請求中文變成問號
原來在個人項目時,用layui的數(shù)據(jù)表格獲取數(shù)據(jù)時,不會出現(xiàn)中文變問號問題
后來換了個項目,發(fā)現(xiàn)返回的json數(shù)據(jù)到頁面中文變成了???問號。
于是開始排查問題出現(xiàn)的原因,首先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();
? ? }排查了一下,發(fā)現(xiàn)在這段代碼上加上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();
? ? }傳到頁面就不會出現(xiàn)中文亂碼了
原來的后來的項目的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"

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java Runtime類詳解_動力節(jié)點Java學院整理
Runtime類封裝了運行時的環(huán)境。每個 Java 應用程序都有一個 Runtime 類實例,使應用程序能夠與其運行的環(huán)境相連接。下面通過本文給大家分享Java Runtime類詳解,需要的朋友參考下吧2017-04-04
java 獲取數(shù)據(jù)庫連接的實現(xiàn)代碼
本篇文章是對在java中獲取數(shù)據(jù)庫連接的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友參考下2013-05-05

