Spring返回text/plain出现中文乱码

Spring返回text/plain出现中文乱码今天在RestTemplate调试的时候发现返回的中文出现了乱码,使用POST

大家好,又见面了,我是你们的朋友全栈君。

今天在RestTemplate调试的时候发现返回的中文出现了乱码,使用postman插件测试却发现没有乱码。

仔细观察返回协议后,发现postman在未设置的时候Accept属性是 */*,所以不是乱码

RestTemplate默认是使用org.springframework.http.converter.StringHttpMessageConverter来解析

/** Create a new instance of the {@link RestTemplate} using default settings. */
	public RestTemplate() {
		this.messageConverters.add(new ByteArrayHttpMessageConverter());
		this.messageConverters.add(new StringHttpMessageConverter());
		this.messageConverters.add(new ResourceHttpMessageConverter());
		this.messageConverters.add(new SourceHttpMessageConverter());
		this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
		if (romePresent) {
			this.messageConverters.add(new AtomFeedHttpMessageConverter());
			this.messageConverters.add(new RssChannelHttpMessageConverter());
		}
		if (jaxb2Present) {
			this.messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
		}
		if (jackson2Present) {
			this.messageConverters.add(new MappingJackson2HttpMessageConverter());
		}
		else if (jacksonPresent) {
			this.messageConverters.add(new MappingJacksonHttpMessageConverter());
		}
	}

看源码发现

public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

	public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

居然是用的ISO-8859-1来编码的

为了判断是客户端出错还是服务端出错,于是用postman将Accept设置为text/plain测试,发现还是乱码

<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<property name="supportedMediaTypes">
				<list>
					<value>text/plain;charset=UTF-8</value>
				</list>
			</property>
		</bean>

在spring mvc中配置的类也是这个,必然是这个有问题了

浏览了很多帖子都说改源码

由于我是Maven构建的项目,所以没有修改源码后替换jar包里的class文件,于是新建一个一样的包名,一样的类名

public class StringHttpMessageConverter extends
		AbstractHttpMessageConverter<String> {

	public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

将源码复制一下,再将IOS-8859-1改为UTF-8,问题迎刃而解!

但是也有不改源码的方法,将spring mvc 配置文件修改如下

<bean class="org.springframework.http.converter.StringHttpMessageConverter">
	<constructor-arg value="UTF-8" index="0">
	</constructor-arg>
	<property name="supportedMediaTypes">
		<list>
			<value>text/plain;charset=UTF-8</value>
		</list>
	</property>
</bean>


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159860.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Headless模式_java throwable

    Headless模式_java throwableHeadless模式是在缺少显示屏、键盘或者鼠标时的系统配置。在java.awt.toolkit和java.awt.graphicsenvironment类中有许多方法,除了对字体、图形和打印的操作外还可以调用显示器、键盘和鼠标的方法。但是有一些类中,比如Canvas和Panel,可以在headless模式下执行。系统属性配置为了启用headless模式,需要使用setProperty方法去设置相…

    2022年10月23日
  • WPF visifire 画出水平直线「建议收藏」

    WPF visifire 画出水平直线「建议收藏」  .xaml:&lt;vc:ChartWidth="400"Height="300"BorderThickness="0,1,1,1"&gt;&lt;vc:Chart.Legends&gt;&lt;vc:LegendVerticalAlignment…

  • ue4 项目模板_卡牌游戏项目模板

    ue4 项目模板_卡牌游戏项目模板del.jpg(596.79KB,下载次数:1)2019-4-2116:34上传—————————-1.02更新日志前言:hello,这里是由RC为您带来的卡牌游戏demo1.02更新,在本次更新中,对游戏性进行了大量的调整,并修复了众多的BUG,同时更新了2张新的卡牌。并特别感谢辉仔与糯米大瓜同学为卡牌设计提供了美术支持!非常感谢!OK,下面是更新…

  • Java Double转Bigdecimal丢失精度原因学习

    Java Double转Bigdecimal丢失精度原因学习记录学习Double转Bigdecimal丢失精度的原因注意事项:不能直接使用Bigdecimal的构造函数传double进行转换,部分数值会丢失精度,因为计算机是二进制的Double无法精确的储存一些小数位,0.1的double数据存储的值实际上并不真的等于0.1如该方式将0.1转换为Bigdecimal得到的结果是0.1000000000000000055511151231257827021181583404541015625这是为什么呢,以往只是知道结论知道不能这么用,也大概知道是因为do

  • 深入理解try catch吃掉异常,及catch(Exception e)中的异常

    深入理解try catch吃掉异常,及catch(Exception e)中的异常

  • 数据结构与算法二叉树的算法_数据结构c语言二叉树的深度

    数据结构与算法二叉树的算法_数据结构c语言二叉树的深度一、什么是二叉树1.概述首先,需要了解树这种数据结构的定义:树:是一类重要的非线性数据结构,是以分支关系定义的层次结构。每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号