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

作者:GuoMiao丿 时间:2023-11-01 02:56:34 

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请求中文变成问号的问题及解决

来源:https://blog.csdn.net/weixin_41318195/article/details/83271471

标签:java,json,中文,问号
0
投稿

猜你喜欢

  • Android App获取屏幕旋转角度的方法

    2021-12-26 10:42:19
  • Java链表数据结构及其简单使用方法解析

    2022-11-20 23:42:53
  • java 中HashCode重复的可能性

    2021-09-13 17:38:05
  • C#多线程处理多个队列数据的方法

    2021-12-26 19:31:02
  • Java SpringBoot拦截器详解

    2021-11-01 15:29:37
  • Spring实战之协调作用域不同步的Bean操作示例

    2023-01-23 02:48:10
  • HorizontalScrollView水平滚动控件使用方法详解

    2023-02-19 21:12:27
  • C#多线程之线程池ThreadPool用法

    2021-07-21 06:28:40
  • Android实现多点触控功能

    2021-10-18 08:39:33
  • 利用Java实现在PDF中添加工具提示

    2022-08-07 18:47:02
  • 解决Java提示正在尝试分配更低的访问权限问题

    2023-11-04 09:31:08
  • Android onClick方法与setOnClickListener方法对比

    2022-02-09 22:21:40
  • 详解EventBus 3.x 的快速使用

    2021-09-04 21:00:29
  • Spring Security基于散列加密方案实现自动登录功能

    2022-09-19 01:10:22
  • java递归算法的实例详解

    2021-06-07 12:15:17
  • SpringBoot整合RocketMQ的详细过程

    2023-07-10 05:07:00
  • Entity Framework主从表的增删改

    2023-10-05 18:56:27
  • Android模拟开关按钮点击打开动画(属性动画之平移动画)

    2021-09-05 17:48:52
  • SpringBoot实现异步事件驱动的方法

    2023-11-01 07:48:54
  • Java 添加、读取和删除 Excel 批注的操作代码

    2023-10-28 21:55:36
  • asp之家 软件编程 m.aspxhome.com