欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

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

来源: javaer 分享于  点击 14383 次 点评:74

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

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

      您可能感兴趣的文章:
      • 详解SpringBoot中添加@ResponseBody注解会发生什么
      • SpringBoot ResponseBody返回值处理的实现
      • 详解SpringBoot定制@ResponseBody注解返回的Json格式
      • SpringBoot使用@ResponseBody返回图片的实现
      相关栏目:

      用户点评