SpringBoot使用FastJson作為JSON格式轉換器的標準工具時,出現亂碼 ...
1、出現問題的現象!如下截圖,使用SpringBoot 進行開發,介面返回的內容出現中文亂碼?
介面內容想要返回的內容:
頁面返回內容:
驚喜不?意外不?
為什麼出現這個情況?不例外的話,很多同事都是替換了SpringBoot自帶的Json框架為FastJson解析工具了。
在替換的過程中,沒有註意編碼格式造成的!
@SpringBootApplication(scanBasePackages = {"com.spring.resource.cloud*"})
@ServletComponentScan({"com.spring.resource.cloud*"})
public class ResourceUploadGuestApplication {
public static void main(String[] args) {
SpringApplication.run(ResourceUploadGuestApplication.class, args);
}
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
//創建FastJson信息轉換對象
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//創建Fastjosn對象並設定序列化規則
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//規則賦予轉換對象
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastJsonHttpMessageConverter);
}
}
2、解決問題唄!
我們從上面的代碼可以看出,在進行數據轉換的時候,直接食用FastJson進行替換了原本的預設轉換工具。那既然出現問題,一定是新的轉換工具出現了問題!
那我們在設定轉換過程,是不是可以設定具體轉換之後的數據類型及編碼格式呢?答案是肯定的!
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
//創建FastJson信息轉換對象
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//創建Fastjosn對象並設定序列化規則
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
// 中文亂碼解決方案
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);//設定json格式且編碼為UTF-8
fastJsonHttpMessageConverter.setSupportedMediaTypes(mediaTypes);
//規則賦予轉換對象
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastJsonHttpMessageConverter);
}
這樣就解決了亂碼問題了!
3、為什麼這麼修改呢?
如果你看到結果之後,想知道為啥這麼修改的話,debug!
初始化的時候,我們看到
SupportedMediaTypes值為 */* 這樣對於很多瀏覽器是識別不了具體的格式和編碼類型的,所以出現亂碼和非格式化的樣子!
(2)指定格式個編碼類型之後,出現了JSON格式和UTF-8編碼格式,其實對應枚舉對象就是
/**
* Public constant media type for {@code application/json;charset=UTF-8}.
*/
public final static MediaType APPLICATION_JSON_UTF8;
小白看問題,淺顯不深究
如若表達不清晰或存疑,可留言指教!
感謝來過
放鬆一下啦,找找下圖幾個方臉吧!
————————————————————————————————————————————————
(^ _ ^) (^ _ ^)(^ _ ^)(^ _ ^)(^ _ ^)(^ _ ^)
(^ _ ^)[^ _ ^](^ _ ^)(^ _ ^)[^ _ ^](^ _ ^)
(^ _ ^)(^ _ ^)(^ _ ^)(^ _ ^)(^ _ ^)
(^ _ ^)[^ _ ^](^ _ ^)(^ _ ^)
(^ _ ^)(^ _ ^)(^ _ ^)
(^ _ ^)[^ _ ^]
(^ _ ^)
————————————————————————————————————————————————