SSM之一步一坑:返回JSON格式 中文乱码问号 解决方案

2023-11-16

在使用SSM框架写代码时,偶然间在console控制台发现一个"text/plain;charset=ISO-8859-1"这种数据格式,如下图

 

当时就感觉有点问题,因为我的项目中使用UTF-8的编码格式,并且在web.xml 中也采用了utf-8的编码过滤,如下图。

但是出现这种情况很不理解,多方百度AbstractMessageConverterMethodProcessor无果,便放弃。

然而在今天需要返回JSON数据时出现中文乱码,发现还是之前发现的问题,接着百度查找答案。。。

错误描述

使用@RequestMapping返回JSON格式时,中文出现问号乱码,如下图前台获取的JSON数据,图中出现的问号是中文,没有编译出。

注:正确的返回JSON数据应该是:

["com.song.model.User@47755c88账号:admin密码:8f61b106154bbc39cd8c2334c046bb62权限:2校验码:NTY0session中的校验码:NTY0"]

查看到request和response的响应报文编码如下

错误原因

在SSM框架中,我才用的是spring-mvc4.0版本,在其对应的org.springframework.http.converter.StringHttpMessageConverter方法中使用的是默认字符集是ISO-8859-1编码,如图

需要将StringHttpMessageConverter的编码方式改为UTF-8.

解决方案

方式一、

在@RequestMapping里面加入produces = "text/html;charset=UTF-8" 

测试结果:

采用这种方案,需要在每个@RequestMapping中都加入produces = "text/html;charset=UTF-8" 比较麻烦。

采用方式二,只需配置好一次spring-mvc就OK。

方式二、

直接将org.springframework.http.converter.StringHttpMessageConverter 里面的属性defaultCharset设置成utf-8

如下设置

在spring-mvc.xml 中

<!-- ========================================分隔线========================================= -->
	<!--自定义消息转换器的编码,解决后台传输json回前台时,中文乱码问题 -->
	<bean id="stringHttpMessageConverter"
		class="org.springframework.http.converter.StringHttpMessageConverter">
		<constructor-arg value="UTF-8" />
	</bean>

<mvc:annotation-driven>
		<mvc:message-converters>
			<ref bean="stringHttpMessageConverter" />
		</mvc:message-converters>
	</mvc:annotation-driven>

 

测试结果:

DEBUG 2019-05-25 19:08:30,872 org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor: Written [com.song.model.User@422c5b83账号:admin密码:8f61b106154bbc39cd8c2334c046bb62权限:2校验码:37A0session中的校验码:37A0] as "text/plain;charset=UTF-8" using [org.springframework.http.converter.StringHttpMessageConverter@74ab2d06]

 

 

写在最后

上述的配置已经过验证。在参考百度资料时,发现有很多文章采用的修改方案是在spring-mvc.xml 中进行如下配置

<mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter" >
                <property name = "supportedMediaTypes">
                    <list>
                        <value>application/json;charset=utf-8</value>
                        <value>text/html;charset=utf-8</value>
                        <!-- application 可以在任意 form 表单里面 enctype 属性默认找到
                        <value>application/x-www-form-urlencoded</value>
                         -->
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
            <property name="supportedMediaTypes">  
                <list>  
                    <value>application/json; charset=UTF-8</value>  
                    <value>application/x-www-form-urlencoded; charset=UTF-8</value>  
                </list>  
            </property>  
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

 

类似上述代码中的配置,我也使用过,但是发现并没有什么用,可能是我的SSM架构有问题,如果参考到本文的小伙伴在参考完解决方案后还是不行,可以测试下这个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSM之一步一坑:返回JSON格式 中文乱码问号 解决方案 的相关文章

随机推荐

  • XView小程序开源组件库

    XView小程序开源组件库 XView小程序组件库本着简单易用的原则封装组件 使用时只需要在json配置文件中引用即可 使用 组件库当中大致可分为一下三大类 布局组件 基础组件 表单组件 XView小程序组件库本着简单易用的原则封装组件 使
  • UI自动化概念 + Web自动化测试框架介绍

    1 UI自动化测试概念 我们先明确什么是UI UI 即 User Interface简称UI用户界面 是系统和用户之间进行交互和信息交换的媒介 UI自动化测试 Web自动化测试和移动自动化测试都属于UI自动化测试 UI自动化测试就是借助自动
  • tf2使用tensorboard(jupyter notebook)

    环境 tensorflow2 0 jupyter notebook unbuntu18 04 这个应该影响不大 示例 用的是iris数据集分类 该数据集库自带 import tensorflow as tf import numpy as
  • Catalan卡塔兰数

    今天在二叉搜索树 随机组成情况 分析复杂度遇到 catalan数 学习并记录一下 背景 分析二叉搜索树 BST 的平均性能时 我们可以分为随机生成和随机组成分析 随机生成 将各节点按照数的顺序随机排列 若含有n个节点 n个互异关键码 则有n
  • 波士顿动力开源代码_失去动力两年后,我如何开始开源之旅

    波士顿动力开源代码 by Hemakshi Sachdev 通过Hemakshi Sachdev 失去动力两年后 我如何开始开源之旅 How I started my open source journey after being demo
  • 数据结构(一)顺序表、链表以及队列

    一 顺序表 顺序表 它具有连续内存地址 访问方便O 1 但是删除和插入不方便O N 常用数组实现 在JAVA中 声明一个数组直接使用语句 int array new int k k为已知的数组大小 当然JAVA中本身自带了很多封装的数组 如
  • 全国地区代码表

    天津市 地区代码 地区名称 1100 天津市 辽宁省 地区代码 地区名称 2210 沈阳市 2210 法库县 2210 康平县 2210 辽中县 2210 新民市 2220 大连市 2222 普兰店市 2223 庄河市 2224 瓦房店市
  • 晶振电路中为什么用22pf或30pf

    让我们一起来看看到底晶振电路中为什么用22pf或30pf的电容而不用别的了 Y1是晶体 相当于三点式里面的电感 C1和C2就是电容 5404非门和R1实现一个NPN的三极管 接下来分析一下这个电路 5404必需要一个电阻 不然它处于饱和截止
  • js获取元素的距离父元素、窗口的距离offsetTop,offsetHeight,clientHeight

    前言 相信很多项目中都会有这样一个小需求 PC端 移动端则是点击 鼠标移上某个菜单或者某个位置 显示一个弹出框 移开则隐藏弹出框 就是css中hover效果 这种通常做法是每个子菜单下都有一个弹框 父元素相对定位 子元素绝对定位 只需要控制
  • 14、Qt 捕捉鼠标事件

    0 需求 在鼠标进入窗口实时捕捉所在位置 以及进行的操作 1 方法 我们主要使用QWidget中的几个方法 鼠标进入 void enterEvent QEvent event 鼠标离开 void leaveEvent QEvent even
  • 管理一年,领悟一生:迷茫、洞见与成长

    领导力跟你做了多少年管理 管过多少人 没有直接的关系 你开悟了 一年就能管得井井有条 不开悟 十年也是一塌糊涂 1 引言 大家好 我是苍何 相信作为技术人的成长路线大家都有了解吧 大家普遍所了解的就是两个路线 技术管理和架构师 而成为架构师
  • ue4大气纹理

    UE4的大气纹理 在 class FAtmosphereTextures public FRenderResource 成员变量上涉及到了辐射 投射 和散射 分三个部分 首先放入一个commandlist 然后分别就各参数创建RTT 传参数
  • python 中关于推导式生成器的一些总结

    推导式 可以理解为是数据生成方式或者是处理方式 类型 列表 元组 字符串 字典 集合 外部包装的括号决定了返回值类型的 定义 列表推导式 表达式 for循环 if语句 1 对列表中的每项元素进行立方运算 变换功能 a 1 2 3 4 5 6
  • 动态规划(1)

    动态规划 Dynamic Programming 是一种具有分治思想的迭代技术 它用于求解某些复杂的不包含决策过程的最优化问题 其基本思路是将原问题分解为子问题 并保存子问题的求解结果 从而避免不必要的重复计算 动态规划的主要思想就是将复杂
  • Java类、构造方法、对象

    public class Lader 定义类 float above 成员变量 类中有效 float bottom float height float area float area 4 合法 area 4 非法 在方法体中赋值 floa
  • 11月8日 改良射线,蓝图 UE4斯坦福 学习笔记

    修改射线类型 更改了昨天的射线类型 void USInteractionComponent PrimaryInteract 射线 FHitResult FHit 碰撞体 FCollisionObjectQueryParams ObjectQ
  • 为什么TCP建立连接需要三次握手

    TCP 协议是我们几乎每天都会接触到的网络协议 绝大多数网络连接的建立都是基于 TCP 协议的 学过计算机网络或者对 TCP 协议稍有了解的人都知道 使用 TCP 协议建立连接需要经过三次握手 three way handshake 如果让
  • 生鲜电商迎巨变?美菜撤出县城,有菜被集团关停

    生鲜B2B电商是个大生意 但也是个苦生意 随着生鲜从风口摔落 对 大 的渴望逐渐让位于对 苦 的体验 据 财经 报道 知名生鲜B2B平台美菜最近密集业务调整 半年来退出数百个县城和10个中心城市 急剧向平台模式转型 疫情带来的线下餐饮行业变
  • JAVA zip 压缩包 导出

    JAVA 导出 zip压缩文件 代码如下 public void downloading String orderId List
  • SSM之一步一坑:返回JSON格式 中文乱码问号 解决方案

    在使用SSM框架写代码时 偶然间在console控制台发现一个 text plain charset ISO 8859 1 这种数据格式 如下图 当时就感觉有点问题 因为我的项目中使用UTF 8的编码格式 并且在web xml 中也采用了u