在 Spring MVC 開發過程中,遇到 HTTP 狀態碼錯誤是家常便飯。本文整理了開發中高頻出現的 404 與 406 兩大經典錯誤,從現象、根因到解決方案逐層剖析,幫助開發者快速定位並修復問題。
假設 Controller 類標註 @RequestMapping("/mq"),方法標註 @RequestMapping("/addLog"),正常訪問路徑應為 localhost:8080/mq/addLog。但實際請求後,控制台卻拋出 /mq/mq/addLog 找不到資源(404),路徑中多出一個 "/mq"。
void,且方法體內未手動向客戶端寫入任何響應數據(如 JSON 字串)。String、Map、自定義 DTO),並配合 @ResponseBody 直接返回數據。HttpServletResponse,手動寫入響應流(如 response.getWriter().write(json))。同樣在上述方法上加上 @ResponseBody,返回類型改為 boolean,執行時直接拋出 406 Not Acceptable。
@ResponseBody 表明意圖將返回值序列化為 JSON 輸出。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 自動配置即可解決。
@ResponseBody 或 @RestController。@Controller + @ResponseBody,簡化代碼並減少配置疏漏。掌握這兩類錯誤的核心機制,能大幅降低 Spring MVC 開發中的調試成本,讓你專注於業務邏輯實現。