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); } } } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心流程分析
OAuth 2.0 主要用于在互联网上安全地委托授权,广泛应用于身份验证和授权场景,这篇文章介绍SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心,感兴趣的朋友一起看看吧2024-01-01微服务mybatis typehandler使用详解(就这一篇够了)
TypeHandler是MyBatis框架的核心组件,实现数据库表字段类型和Java 数据类型之间的相互转换,本文介绍通过实例代码mybatis typehandler使用,感兴趣的朋友一起看看吧2024-02-02Spring中的@CrossOrigin注册处理方法源码解析
这篇文章主要介绍了Spring中的@CrossOrigin注册处理方法源码解析,@CrossOrigin是基于@RequestMapping,@RequestMapping注释方法扫描注册的起点是equestMappingHandlerMapping.afterPropertiesSet(),需要的朋友可以参考下2023-12-12SpringBoot项目集成Flyway进行数据库版本控制的详细教程
这篇文章主要介绍了SpringBoot项目集成Flyway进行数据库版本控制,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-07-07
最新评论