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

 更新时间:2024年06月01日 08:39:05   作者:你猜我猜上青天  
这篇文章主要介绍了Springboot使用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);
            }
        }
    }
 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java值传递之swap()方法不能交换的解决

    Java值传递之swap()方法不能交换的解决

    这篇文章主要介绍了Java值传递之swap()方法不能交换的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java实现PDF表格转换为CSV的示例代码

    Java实现PDF表格转换为CSV的示例代码

    在很多企业办公和数据分析的场景中,PDF 中常常存放着报表、清单或统计数据,本文将介绍如何借助 Free Spire.PDF for Java,在 Java 程序中完成 PDF 表格到 CSV 的自动转换,感兴趣的看了解下
    2025-08-08
  • Java8如何从一个Stream中过滤null值

    Java8如何从一个Stream中过滤null值

    这篇文章主要介绍了Java8如何从一个Stream中过滤null值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)

    SpringBoot项目的logback日志配置(包括打印mybatis的sql语句)

    这篇文章主要介绍了SpringBoot项目的logback日志配置(包括打印mybatis的sql语句),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java图搜索算法之图的对象化描述示例详解

    java图搜索算法之图的对象化描述示例详解

    这篇文章主要为大家介绍了java图搜索算法之图的对象化描述示例详解,可以带你秒杀所有的图搜索算法,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • maven项目在svn中的上传与检出的方法

    maven项目在svn中的上传与检出的方法

    企业开发中经常使用svn来为我们控制代码版本,也经常使用maven来管理项目。下面将介绍一下如何将maven项目上传到svn中,如何将项目从svn中检出,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • java synchronized关键字用法和底层原理举例详解

    java synchronized关键字用法和底层原理举例详解

    synchronized关键字是java语言进行多线程编程,非常常用的关键,这篇文章主要介绍了java synchronized关键字用法和底层原理的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-01-01
  • 使用filebeat收集并解析springboot日志过程示例

    使用filebeat收集并解析springboot日志过程示例

    这篇文章主要为大家介绍了使用filebeat收集并解析springboot日志实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 对数据进行分页显示到table中的实现方法

    对数据进行分页显示到table中的实现方法

    这篇文章主要介绍了对数据进行分页显示到table中的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-05-05
  • idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

    idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

    这篇文章主要介绍了idea报错java:非法字符:\ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现\ufeff错误,这是由于BOM字符被认为是非法字符导致的,通过示例代码将解决的过程介绍的非常详细,需要的朋友可以参考下
    2025-05-05

最新评论