2012-02-19 71 views
1

我對@RequestMapping URI模板有疑問。我建立了一個控制器來處理用戶細節更新。我在下面寫兩種方法。spring @RequestMapping URI模板錯誤

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}") 
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String applicationModuleType, 
                  @PathVariable String userCountryCode, 
                  @PathVariable String applicationModuleId, 
                  Model model) { 
    System.out.println("************ form:Submited"); 
    } 
    return null; 
} 

@RequestMapping(value="/updateUser/**") 
public @ResponseBody Object handleRequest(Model model) { 
    System.out.println("************ form:Submited all"); 
    return null; 
} 

和請求URI是像/ PROJECT_NAME/UpdateUser兩個/應用/ AU/132

當我跑這個程序在Tomcat中,第一方法不會被調用。控制器總是使用第二個。但在Spring框架文檔中,它表示「一種方法可以具有任何數量的@PathVariable註釋」。

所以,我不明白爲什麼我不能在方法中有三個@PathVariable註釋。

另一件事是,如果我改變像下面這樣的第一個方法@RequestMapping註解,它可以被調用。

@RequestMapping(value="/updateUser/app/{userCountryCode}/{applicationModuleId}") 
public @ResponseBody Object handleUpdateUserDetailsRequest(@PathVariable String userCountryCode, 
                  @PathVariable String applicationModuleId, 
                  Model model) { 
    System.out.println("************ form:Submited"); 
    } 
    return null; 
} 

看來春天不能在ONE方法中處理三個@PathVariable註解。

有沒有人能告訴我爲什麼或在哪裏做錯了?

在此先感謝!

回答

2

當三個@PathVariable註釋Spring會覺得@RequestMapping(值= 「/ UpdateUser兩個/ **」) 匹配不止於此/ UpdateUser兩個/ {applicationModuleType}/{userCountryCode}/{} applicationModuleId

如果您除去

@RequestMapping(value="/updateUser/**") 

,你會發現它會

@RequestMapping(value="/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId}") 

你應該使用@RequestParam傳遞參數調用。不是@PathVariable。

3

與路徑變量無關,您只是有衝突的映射。

/updateUser/** 

/updateUser/{applicationModuleType}/{userCountryCode}/{applicationModuleId} 

將匹配相同的URI:秒。