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

Spring MVC 開發常見錯誤排查:404 與 406 錯誤深度解析

     編輯:Java 綜合教學

Spring MVC 開發常見錯誤排查:404 與 406 錯誤深度解析

在 Spring MVC 開發過程中,遇到 HTTP 狀態碼錯誤是家常便飯。本文整理了開發中高頻出現的 404 與 406 兩大經典錯誤,從現象、根因到解決方案逐層剖析,幫助開發者快速定位並修復問題。

一、404 錯誤:請求路徑莫名其妙多了一層

現象重現

假設 Controller 類標註 @RequestMapping("/mq"),方法標註 @RequestMapping("/addLog"),正常訪問路徑應為 localhost:8080/mq/addLog。但實際請求後,控制台卻拋出 /mq/mq/addLog 找不到資源(404),路徑中多出一個 "/mq"。

根因分析

  • 該處理方法的返回類型為 void,且方法體內未手動向客戶端寫入任何響應數據(如 JSON 字串)。
  • Spring MVC 規定:返回 void 的方法必須自行完成響應輸出,否則框架會嘗試根據約定尋找視圖,導致路徑解析異常,最終觸發 404。

解決方案

  1. 修改返回類型:改為具體類型(如 String、Map、自定義 DTO),並配合 @ResponseBody 直接返回數據。
  2. 保持 void 返回:在方法內注入 HttpServletResponse,手動寫入響應流(如 response.getWriter().write(json))。

二、406 錯誤:缺少 JSON 轉換器導致媒體類型不匹配

現象重現

同樣在上述方法上加上 @ResponseBody,返回類型改為 boolean,執行時直接拋出 406 Not Acceptable。

根因分析

  • @ResponseBody 表明意圖將返回值序列化為 JSON 輸出。
  • Spring MVC 預設未註冊 JSON 轉換器(如 Jackson 的 MappingJackson2HttpMessageConverter),無法完成序列化,故回應「客戶端不接受該 MIME 類型」。

解決方案

在 Spring 配置文件(spring.xml 或 dispatcher-servlet.xml)中顯式註冊 JSON 轉換器:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

或引入 spring-boot-starter-web 依賴,利用 Spring Boot 自動配置即可解決。

總結與最佳實踐

  • 避免 void 返回:除非需手動控制響應流,否則建議明確返回數據模型,配合 @ResponseBody 或 @RestController。
  • 完善消息轉換器:專案初始化時統一配置 JSON、XML 等轉換器,避免 406 錯誤。
  • 善用 @RestController:組合 @Controller + @ResponseBody,簡化代碼並減少配置疏漏。

掌握這兩類錯誤的核心機制,能大幅降低 Spring MVC 開發中的調試成本,讓你專注於業務邏輯實現。

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