2012-01-31 151 views
22

我試圖將網址映射/locations/{locationId}/edit.html - 這似乎與此代碼的工作:PathVariable春季控制器

@Controller 
@RequestMapping("/locations") 
public class LocationController 
{ 
    @RequestMapping(value = "/{locationId}/edit.html", method = RequestMethod.GET) 
    public String showEditForm(Map<String, Object> map, @PathVariable int locationId) 
    { 
    map.put("locationId", locationId); 
    return "locationform"; 
    } 
} 

呼叫中的異常所提到的URL結果:

java.lang.IllegalArgumentException: Name for argument type [int] not available, and parameter name information not found in class file either. 

我是否以錯誤的方式使用了@PathVariable註解?

如何正確使用它?

回答

32

應該是@PathVariable("locationId") int locationId

+8

這在這裏詳細描述,而當你的代碼沒有調試信息(HTTP發生編譯:// docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html):**如果URI模板變量名稱與方法參數名稱匹配,則可以省略該詳細信息。只要你的代碼沒有在沒有調試信息的情況下編譯,Spring MVC會將方法參數名稱與URI模板變量名稱** – 2013-11-20 19:16:56

+0

注意,使用「Debug As」進行編譯不一定包含項目中的調試信息。檢查你的設置,[詳細在這裏](http://stackoverflow.com/a/1318483/1412656),並基本檢查所有調試測深複選框! – 2013-11-20 19:27:29

16

您應該value參數添加到您的@PathVariable,例如,

public String showEditForm(
     @PathVariable("locationId") int locationId, 
     Map<String, Object> map) { 
    // ... 
}