java返回json请求中文变成问号的问题及解决

目录
  • java返回json请求中文变成问号
  • 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"

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java Http请求传json数据乱码问题的解决

    业务场景:调easyui的dialog打开一个弹窗,传参是用json封装的,而且有中文,然后在极速模式是正常的,在ie11测试发现中文出现乱码了 var params = JSON.stringify(writParamList); top.dialog({ id: 'noticeList', title:'列表', width:900, height:500, url:'${root}/notice/multiNoticeList.do?params='+params, onclose:fun

  • 解决SpringMvc后台接收json数据中文乱码问题的几种方法

    1.使用ajax从前台页面传输数据到后台controller控制器的时候,出现中文乱码(问号???). 之前在网上找了各种解决方案,都行不通,最后发现是tomcat服务器接收数据的问题 解决方案: 方式一:在controller接收参数时,对参数进行转码 @ResponseBody @RequestMapping(value="/getJsonDataByCityName",produces="application/json") public String get

  • 解决java转义json出现\u0000 等乱码的问题

    今天遇到了String乱码怎么都去不了的问题,最后的解决方法很简单,也不是方法的问题,是数据过滤之后进行的数据处理,在处理阶段生成了乱码,难怪我在过滤阶段怎么去都去不掉- -,不过花时间知道了很多处理乱码的方法,在这里记录一下. 在将中文数据转成json格式的时候,碰到了很多char型直接显示出来的,比如\u0000, \u201d, \u201c 首先我想到的是我的数据筛选出现了问题,于是去修改了筛选的部分: title = title.replaceAll("\\u0000",&q

  • java返回json请求中文变成问号的问题及解决

    目录 java返回json请求中文变成问号 json返回中文全是问号 java返回json请求中文变成问号 原来在个人项目时,用layui的数据表格获取数据时,不会出现中文变问号问题 后来换了个项目,发现返回的json数据到页面中文变成了???问号. 于是开始排查问题出现的原因,首先jsp页面头部确保使用了UTF-8编码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageE

  • 用ajax传递json到前台中文出现问号乱码问题的解决办法

    我使用的Springmvc,在controller层传输一个json到前台,后台显示没问题,中文正常显示而到了前台 中文就变成了问号. 后来发现,因为在controller中返回json用了@ResponseBody,而spring源码中@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,而项目用的编码为utf-8,所以传中文会出现乱码. 这里我使用了注解来解决: @RequestMapping(value="/echarts.do", produces =

  • 详解Spring MVC3返回JSON数据中文乱码问题解决

    查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF-8.GBK 等. 代码如下: import org.s

  • java操作json对象出现StackOverflow错误的问题及解决

    目录 java操作json对象出现StackOverflow错误 解决方法 记录一次json转换对象的异常 java操作json对象出现StackOverflow错误 今天在做项目的时候,遇到一个非常怪异的问题.一个java实体类中存在多个属性,每一个属性都是JsonObject类型. 在程序中用setXXX方法对这些属性设置值的时候,竟然报了Stack Overflow的错误.仔细检查了一遍程序,确定没有循环引用和死递归的发生.最后经过和查阅相关资料,终于发现我用的JsonObject是net

  • JQuery ajax 返回json时出现中文乱码该如何解决

    使用jQuery ajax调用的返回json,中文乱码问题 Js代码如下: $.ajax({ url: '/test/testAction.do?method=test', type: 'POST', dataType: 'json', timeout: 5000, async: false, error: function(){ alert('获取数据失败!'); }, success: function(json){ jsObject = eval(json); } }); return j

  • java发起http请求获取返回的Json对象方法

    话不多说,先看代码! /** * Created by david on 2017-7-5. */ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import ja

  • java 通过发送json,post请求,返回json数据的方法

    实例如下所示: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONArray; impo

  • Java Web程序实现返回JSON字符串的方法总结

    基础铺垫 在java中,关于json的lib有很多,比如jackjson.fastjson.gson等等,本人都用过,但是对于我等只需要让java对象返回json字符串即可的程序员来说,还是显得过于繁重.而且有些功能定制性很差,比如一个java对象的属性为空时,这些组件都不会输出,于是本人在页面循环遍历列表对象时,总是得判断此属性是否为undefined,这一点让本人很不满意.所以决定花点时间研究下到底是怎么回事. 但经过一上午的细看,发现不管是fastjson还是gson都代码都写得相当的复杂

  • java以json格式向后台服务器接口发送请求的实例

    代码如下: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import net.sf.json.JSONObject; public class InterfaceRequest {

  • jquery的ajax异步请求接收返回json数据实例

    jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发送设置的datatype设置为jsonp格式数据或json格式都可以. 代码示例如下: 复制代码 代码如下: $('#send').click(function () {     $.ajax({         type : "GET",         url : "a.php",         dataType : "json

随机推荐