这篇文章主要介绍了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"
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:java返回json请求中文变成问号的问题及解决
基础教程推荐
猜你喜欢
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现线程插队的示例代码 2022-09-03
- java实现多人聊天系统 2023-05-19
- springboot自定义starter方法及注解实例 2023-03-31
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现查找文件和替换文件内容 2023-04-06
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java数据结构之对象比较详解 2023-03-07
- Java文件管理操作的知识点整理 2023-05-19