java返回json请求中文变成问号的问题及解决
java返回json请求中文变成问号
原来在个人项目时,用layui的数据表格获取数据时,不会出现中文变问号问题
后来换了个项目,发现返回的json数据到页面中文变成了???问号。
于是开始排查问题出现的原因,首先jsp页面头部确保使用了UTF-8编码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
既然不是页面的问题,肯定就是后台问题,之前的后台代码是:
@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");:
@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"
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
相关文章