首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring MVC JSON 返回中文亂碼:@ResponseBody + produces 徹底解決

     編輯:程式設計綜合問答

現象:配置了 StringHttpMessageConverter 仍亂碼,Response Header 仍是 text/plain;charset=ISO-8859-1。

根因

<mvc:annotation-driven> 會註冊默認轉換器,**順序優先於自定義 converter**。若不關閉默認註冊,自定義的 UTF-8 轉換器不生效。

正確配置:register-defaults="false" + 顯式聲明

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="false">
        <!-- 1. String 轉換器:指定 UTF-8 -->
        <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>

        <!-- 2. JSON 轉換器:Jackson 2.x -->
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="supportedMediaTypes">
                <list><value>application/json;charset=UTF-8</value></list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

Controller 規範寫法

@RestController // 等同 @Controller + @ResponseBody
@RequestMapping(value = "/api", produces = "application/json;charset=UTF-8")
public class MyController {
    @GetMapping("/data")
    public Result getData() {
        return Result.ok("中文內容"); // 直接返回對象,Jackson 自動序列化
    }
}

關鍵點清單

  1. register-defaults="false" 禁用 Spring 默認轉換器(含 ISO-8859-1 StringConverter)。
  2. 顯式聲明 StringHttpMessageConverter 並綁定 charset=UTF-8。
  3. Jackson 2.x 用 MappingJackson2HttpMessageConverter,1.x 用 MappingJacksonHttpMessageConverter。
  4. Controller 方法或類級別加 produces = "application/json;charset=UTF-8",雙重保險。
  5. 確保源文件編碼為 UTF-8(IDE 右下角 / Maven project.build.sourceEncoding)。

驗證方式

curl -v https://localhost:8080/api/data
# 檢查 Response Headers:
# Content-Type: application/json;charset=UTF-8
# 體裡中文正常顯示

徹底解決亂碼核心:**掌握轉換器註冊順序與優先級,禁用默認、顯式指定 UTF-8,Controller 加 produces**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved