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

Spring MVC Controller 未被調用:@RequestMapping 路徑不匹配的排查與修復

     編輯:程式設計綜合問答

錯誤日誌關鍵信息

DEBUG - Looking up handler method for path /view/adduser
DEBUG - Did not find handler method for [/view/adduser]
DEBUG - Mapping [/view/adduser] to HandlerExecutionChain with handler 
  [org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler]

根因分析

請求路徑 /view/adduser 與 Controller 映射 /adduser 不匹配,Spring 退而尋求靜態資源處理器,導致 Controller 未執行。

代碼對比

// ❌ 當前 Controller
@Controller
public class UserController {
    @RequestMapping("/adduser")  // 只匹配 /adduser
    public ModelAndView addUser(...) { ... }
}

// 請求 URL: /view/adduser  (表單 action 或 AJAX url)

修復方案

方案一:類級別添加基礎路徑 (推薦)

@Controller
@RequestMapping("/view")  // 類級別映射前綴
public class UserController {
    
    @RequestMapping("/adduser")  // 完整路徑: /view/adduser
    public ModelAndView addUser(...) { ... }
    
    @RequestMapping("/seluser")  // 完整路徑: /view/seluser
    public ModelAndView selUser(...) { ... }
}

方案二:方法級別完整路徑

@Controller
public class UserController {
    @RequestMapping("/view/adduser")
    public ModelAndView addUser(...) { ... }
}

方案三:修正前端請求路徑

<!-- JSP 表單 -->
<form action="<%=request.getContextPath()%>/adduser" method="post">
  <!-- 而非 /view/adduser -->
</form>

Spring MVC 路徑解析機制

最終匹配路徑 = 類級別 @RequestMapping + 方法級別 @RequestMapping
// 例: /view + /adduser = /view/adduser

調試技巧

  1. 啟用 DEBUG 日誌:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
  2. 2. 訪問 /actuator/mappings (Spring Boot Actuator) 查看所有映射 3. 瀏覽器 Network 面板確認實際請求 URL 4. Controller 方法首行打印日誌驗證進入

相關配置檢查清單

  • ✅ <mvc:annotation-driven />
  • ✅ <mvc:default-servlet-handler />
  • ✅ DispatcherServlet 映射 / 而非 *.do
  • ✅ ComponentScan 包含 Controller 包
  • ✅ 無衝突的 ViewResolver 配置
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved