Springboot使用ResponseBody漢字返回問(wèn)號(hào)問(wèn)題
使用ResponseBody漢字返回問(wèn)號(hào)
說(shuō)明
突然有個(gè)接口在前臺(tái)彈出的中文信息突然變成問(wèn)號(hào)了。
情況
當(dāng)時(shí)排查以為是數(shù)據(jù)庫(kù)的問(wèn)題,但是在別的表都正常,我再新建的表返回也是問(wèn)號(hào),問(wèn)題應(yīng)該不是數(shù)據(jù)庫(kù)的問(wèn)題;
后懷疑idea的編碼問(wèn)題,但是環(huán)境是自動(dòng)發(fā)布在Linux上,猜測(cè)應(yīng)該不是編碼問(wèn)題,而且也不好測(cè)試;
而在本地環(huán)境測(cè)試時(shí)發(fā)現(xiàn),如果返回的是自己的pojo沒(méi)有問(wèn)題(單純的對(duì)象,沒(méi)有繼承和實(shí)現(xiàn)),就感覺(jué)很奇怪,直接返回字符串或者使用Gson().toJson()都是問(wèn)號(hào)。
結(jié)果
通過(guò)查詢發(fā)現(xiàn)是SpringMVC的普遍情況。
使用mvc時(shí),可以通過(guò)在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時(shí),可以通過(guò)實(shí)現(xiàn)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返回字符串中文亂碼問(wèn)題
for (HttpMessageConverter<?> converter : converters) {
if (converter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter)converter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)PDF表格轉(zhuǎn)換為CSV的示例代碼
在很多企業(yè)辦公和數(shù)據(jù)分析的場(chǎng)景中,PDF 中常常存放著報(bào)表、清單或統(tǒng)計(jì)數(shù)據(jù),本文將介紹如何借助 Free Spire.PDF for Java,在 Java 程序中完成 PDF 表格到 CSV 的自動(dòng)轉(zhuǎn)換,感興趣的看了解下2025-08-08
Java8如何從一個(gè)Stream中過(guò)濾null值
這篇文章主要介紹了Java8如何從一個(gè)Stream中過(guò)濾null值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語(yǔ)句)
這篇文章主要介紹了SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語(yǔ)句),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java?synchronized關(guān)鍵字用法和底層原理舉例詳解
synchronized關(guān)鍵字是java語(yǔ)言進(jìn)行多線程編程,非常常用的關(guān)鍵,這篇文章主要介紹了java?synchronized關(guān)鍵字用法和底層原理的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-01-01
使用filebeat收集并解析springboot日志過(guò)程示例
這篇文章主要為大家介紹了使用filebeat收集并解析springboot日志實(shí)現(xiàn)過(guò)程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
對(duì)數(shù)據(jù)進(jìn)行分頁(yè)顯示到table中的實(shí)現(xiàn)方法
這篇文章主要介紹了對(duì)數(shù)據(jù)進(jìn)行分頁(yè)顯示到table中的實(shí)現(xiàn)方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
idea報(bào)錯(cuò)java:?非法字符:?‘\ufeff‘的解決步驟以及說(shuō)明
這篇文章主要介紹了idea報(bào)錯(cuò)java:非法字符:\ufeff的解決步驟以及說(shuō)明,文章詳細(xì)解釋了為什么在Java中會(huì)出現(xiàn)\ufeff錯(cuò)誤,這是由于BOM字符被認(rèn)為是非法字符導(dǎo)致的,通過(guò)示例代碼將解決的過(guò)程介紹的非常詳細(xì),需要的朋友可以參考下2025-05-05

