2012-01-31 14 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"; 
    } 
} 

कॉल एक अपवाद में उल्लेख यूआरएल परिणाम:

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): ** यदि यूआरआई टेम्पलेट वैरिएबल नाम विधि तर्क नाम से मेल खाता है तो आप उस विवरण को छोड़ सकते हैं। जब तक आपका कोड डिबगिंग जानकारी के बिना संकलित नहीं किया जाता है, तब तक स्प्रिंग एमवीसी यूआरआई टेम्पलेट वैरिएबल नाम ** –

+0

पर विधि तर्क नाम से मेल खाएगा नोट करें कि "डीबग एज़" का उपयोग करके संकलित करने के लिए परियोजना में डीबग जानकारी शामिल नहीं होगी। अपनी सेटिंग्स जांचें, [जैसा कि यहां विस्तृत किया गया है] (http://stackoverflow.com/a/1318483/1412656), और मूल रूप से सभी डीबग ध्वनि चेकबॉक्स जांचें! –

16

आप अपने @PathVariable, जैसे करने के लिए value तर्क जोड़ना चाहिए

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