VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • Springboot使用ResponseBody汉字返回问号问题


这篇文章主要介绍了Springboot使用ResponseBody汉字返回问号问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

使用ResponseBody汉字返回问号
说明
情况
结果
使用@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);
            }
        }
    }
  
}

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持vb.net教程C#教程python教程SQL教程access 2010教程https://www.xin3721.com/

原文链接:https://blog.csdn.net/weixin_42143904/article/details/119667747

相关教程