2012-01-31 18 views
22

Estoy intentando asignar la dirección URL /locations/{locationId}/edit.html - que parece funcionar con este código:PathVariable en el controlador de la 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"; 
    } 
} 

los resultados de llamadas URL mencionada en una excepción:

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

¿Estoy utilizando @PathVariable Annotation de forma incorrecta?

¿Cómo usarlo correctamente?

Respuesta

32

debe ser @PathVariable("locationId") int locationId

+8

se detalla aquí, y ocurre cuando el código se compila sin información de depuración (http: // docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html): ** si el nombre de la variable de la plantilla URI coincide con el nombre del argumento del método, puede omitir ese detalle. Siempre que su código no se compile sin información de depuración, Spring MVC hará coincidir el nombre del argumento del método con el nombre de la variable de plantilla URI ** –

+0

, tenga en cuenta que la compilación con "Depurar como" no necesariamente incluirá información de depuración en el proyecto. Verifique su configuración, [como se detalla aquí] (http://stackoverflow.com/a/1318483/1412656), y básicamente verifique todas las casillas de verificación de sonido de depuración. –

16

se debe añadir el argumento value a su @PathVariable, por ejemplo,

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