使用responsebody汉字返回问号
说明
突然有个接口在前台弹出的中文信息突然变成问号了。
情况
当时排查以为是数据库的问题,但是在别的表都正常,我再新建的表返回也是问号,问题应该不是数据库的问题;
后怀疑idea的编码问题,但是环境是自动发布在linux上,猜测应该不是编码问题,而且也不好测试;
而在本地环境测试时发现,如果返回的是自己的pojo没有问题(单纯的对象,没有继承和实现),就感觉很奇怪,直接返回字符串或者使用gson().tojson()都是问号。
结果
通过查询发现是springmvc的普遍情况。
使用mvc时,可以通过在xml里配置:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.stringhttpmessageconverter">
<property name="supportedmediatypes">
<list>
<value>text/plain;charset=utf-8</value>
<value>text/html;charset=utf-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>使用springboot时,可以通过实现webmvcconfigurer:
@configuration
public class webmvcconfig implements webmvcconfigurer {
@override
public void configuremessageconverters(list<httpmessageconverter<?>> converters) {
stringhttpmessageconverter converter = new stringhttpmessageconverter(charset.forname("utf-8"));
converters.add(converter);
}
}使用@responsebody返回字符串乱码的解决
在java配置类文件中加入以下代码即可解决:
import org.springframework.context.annotation.configuration;
import org.springframework.http.converter.httpmessageconverter;
import org.springframework.http.converter.stringhttpmessageconverter;
import org.springframework.web.servlet.config.annotation.webmvcconfigurationsupport;
import java.nio.charset.standardcharsets;
import java.util.list;
@configuration
public class webconfig extends webmvcconfigurationsupport {
@override
protected void extendmessageconverters(list<httpmessageconverter<?>> converters) {
// 解决controller返回字符串中文乱码问题
for (httpmessageconverter<?> converter : converters) {
if (converter instanceof stringhttpmessageconverter) {
((stringhttpmessageconverter)converter).setdefaultcharset(standardcharsets.utf_8);
}
}
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论