2012-01-31 3 views
22

Я пытаюсь сопоставить URL /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 Annotation неправильным способом?

Как использовать его правильно?

ответ

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 ** –

+0

. Обратите внимание, что просто компиляция с использованием «Debug As» необязательно включает в себя информацию об отладке в проекте. Проверьте свои настройки, [как подробно описано здесь] (http://stackoverflow.com/a/1318483/1412656), и в основном проверьте все флажки отладки! –

16

Вы должны добавить value аргумент ваш @PathVariable, например,

public String showEditForm(
     @PathVariable("locationId") int locationId, 
     Map<String, Object> map) { 
    // ... 
} 
Смежные вопросы