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>

嗯,算是踩了个坑,分享一下

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值