当前位置: 代码网 > it编程>编程语言>Java > Springboot使用ResponseBody汉字返回问号问题

Springboot使用ResponseBody汉字返回问号问题

2024年06月12日 Java 我要评论
使用responsebody汉字返回问号说明突然有个接口在前台弹出的中文信息突然变成问号了。情况当时排查以为是数据库的问题,但是在别的表都正常,我再新建的表返回也是问号,问题应该不是数据库的问题;后怀

使用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);
            }
        }
    }
 
}

总结

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

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com