java返回json请求中文变成问号的问题及解决
作者:GuoMiao丿
这篇文章主要介绍了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"
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。