如何解決Spring Boot項目中文亂碼問題?

Spring Boot是一個非常受歡迎的Java Web框架,但是在中文編碼方面一直存在一些挑戰。在這篇文章中,我們將會介紹一些可以用來解決Spring Boot中文亂碼問題的方法。

一、處理HTTP請求參數中的中文亂碼問題

一般情況下,在Spring Boot中處理HTTP請求參數的方法是使用@RequestParam註解。但是如果在請求參數中包含中文字符,處理就會變得有些複雜。 下面的代碼演示了當中文字符作為參數輸入時,Spring Boot接收到的中文會出現亂碼:

@RestController
public class MyController {

    @RequestMapping("/get")
    public String get(@RequestParam("name") String name) {
        return "Hello " + name;
    }
}

如果我們使用以下URL進行請求:

http://localhost:8080/get?name=世界

那麼會得到以下返回結果:

Hello ÐÏ×

如何解決這個問題呢?我們可以在應用程序的配置文件中添加一行代碼:

server.tomcat.uri-encoding=UTF-8

這個配置告訴Tomcat使用UTF-8編碼來解析URL。 而且,我們還可以在@RequestMapping中加入produces=”text/plain;charset=UTF-8”來告訴Spring Boot使用UTF-8編碼來輸出結果,如下所示:

@RestController
public class MyController {

    @RequestMapping(value = "/get", produces = "text/plain;charset=UTF-8")
    public String get(@RequestParam("name") String name) {
        return "Hello " + name;
    }
}

這時候,當我們發出同樣的請求時,就能夠得到正確的結果了。

二、使用HttpMessageConverter解決中文亂碼問題

除了HTTP請求參數,返回的JSON字符串中的中文字符也可能會出現亂碼。這時候,我們可以使用Spring Boot提供的HttpMessageConverter來解決問題。 下面的代碼展示了如何在Spring Boot應用程序中配置一個新的HttpMessageConverter,使用UTF-8編碼來處理字符串:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public StringHttpMessageConverter stringHttpMessageConverter() {
        return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(stringHttpMessageConverter());
    }
}

這個配置告訴Spring Boot使用UTF-8編碼來對字符串進行處理。 而當我們使用@ResponseBody註解來返回一個包含中文字符的字符串時,Spring Boot就會自動應用這個HttpMessageConverter來解決中文亂碼問題:

@RestController
public class MyController {

    @RequestMapping(value = "/get", produces = "text/plain;charset=UTF-8")
    @ResponseBody
    public String get() {
        return "世界一二三";
    }
}

我們可以使用curl命令來測試一下:

curl -i -H “Accept: application/json” -H “Content-Type: application/json” -X GET http://localhost:8080/get

如果返回的結果是正確的,那麼就說明我們已經成功解決了中文亂碼問題。

三、使用過濾器解決中文亂碼問題

在某些情況下,我們可能會遇到無法使用HttpMessageConverter解決中文亂碼問題的情況。這時候,我們可以使用過濾器來解決問題。 下面的代碼展示了如何在Spring Boot應用程序中配置一個新的過濾器,用於處理中文字符的編碼問題:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public FilterRegistrationBean encodingFilterRegistration() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        registrationBean.setFilter(characterEncodingFilter);
        registrationBean.addUrlPatterns("/*");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

這個配置告訴Spring Boot在所有的URL請求中使用UTF-8編碼來處理中文字符。你可以將它與Spring Boot的自動配置功能結合起來使用,如下所示:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public FilterRegistrationBean encodingFilterRegistration() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        registrationBean.setFilter(characterEncodingFilter);
        registrationBean.addUrlPatterns("/*");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

這時候,在所有的URL請求中,都會使用UTF-8編碼來處理中文字符了。這樣,就可以解決絕大多數的中文亂碼問題了。

四、總結

對於Spring Boot項目中的中文亂碼問題,我們介紹了一些常見的解決方法,包括Tomcat URI編碼、HttpMessageConverter、以及過濾器。每個方法都有其適用場景,在實際開發過程中需要根據具體情況進行選擇。儘管在使用過程中難免會遇到問題和挑戰,但是通過不斷地嘗試和實踐,我們一定可以最終解決掉這些問題。

原創文章,作者:HFYSO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334409.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HFYSO的頭像HFYSO
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • 如何解決WPS保存提示會導致宏不可用的問題

    如果您使用過WPS,可能會碰到在保存的時候提示“文件中含有宏,保存將導致宏不可用”的問題。這個問題是因為WPS在默認情況下不允許保存帶有宏的文件,為了解決這個問題,本篇文章將從多個…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • 如何解決dlib庫安裝失敗

    如果您遇到了dlib庫安裝失敗的問題,在此文章中,我們將從多個方面對這個問題進行詳細的闡述,並給出解決方法。 一、檢查環境安裝情況 1、首先,您需要確認是否安裝了C++編譯器和Py…

    編程 2025-04-29
  • Python讀取中文

    Python是一種高級編程語言,被廣泛地應用於各種領域中。而處理中文數據也是其中重要的一部分。本文將介紹在Python中如何讀取中文,為大家提供指導和幫助。 一、讀取中文文件 在P…

    編程 2025-04-29
  • 如何解決web瀏覽器雙擊事件時差

    本文將從以下幾個方面對web瀏覽器雙擊事件時差進行詳細闡述,並提供解決方法。 一、雙擊事件延時設置 1、問題描述:在web瀏覽器中,雙擊事件默認會延時一定的時間才能觸發該事件,這個…

    編程 2025-04-29
  • jQuery Datatable分頁中文

    jQuery Datatable是一個非常流行的數據表插件,它可以幫助您快速地在頁面上創建搜索、過濾、排序和分頁的數據表格。不過,它的默認設置是英文的,今天我們就來探討如何將jQu…

    編程 2025-04-29
  • Python計算中文字符個數

    本文將從多個方面對Python計算中文字符個數進行詳細的闡述,包括字符串長度計算、正則表達式統計和模塊使用方法等內容。 一、字符串長度計算 在Python中,計算字符串長度是非常容…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網絡爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • 如何解決vuejs應用在nginx非根目錄下部署時訪問404的問題

    當我們使用Vue.js開發應用時,我們會發現將應用部署在nginx的非根目錄下時,訪問該應用時會出現404錯誤。這是因為Vue在刷新頁面或者直接訪問非根目錄的路由時,會認為服務器上…

    編程 2025-04-29

發表回復

登錄後才能評論