2012-01-31 18 views
22

Sto cercando di mappare l'url /locations/{locationId}/edit.html - che sembra funzionare con questo codice:PathVariable nel controller primavera

@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"; 
    } 
} 

call I risultati url menzionati in un'eccezione:

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

Sto utilizzando l'annotazione @PathVariable in modo errato?

Come si utilizza correttamente?

risposta

32

dovrebbe essere @PathVariable("locationId") int locationId

+8

questo è dettagliato qui, e succede quando il codice viene compilato senza informazioni di debug (http: // docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html): ** se il nome della variabile del modello URI corrisponde al nome dell'argomento del metodo, è possibile omettere tale dettaglio. Finché il tuo codice non è compilato senza informazioni di debug, Spring MVC abbinerà il nome dell'argomento del metodo al nome della variabile URI ** –

+0

nota che la semplice compilazione usando "Debug come" non includerà necessariamente le informazioni di debug nel progetto. Controlla le tue impostazioni, [come dettagliato qui] (http://stackoverflow.com/a/1318483/1412656), e in pratica controlla tutte le caselle di controllo del debug! –

16

si dovrebbe aggiungere l'argomento value al @PathVariable, ad esempio,

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