web-dev-qa-db-fra.com

PathVariable in Spring Controller

J'essaie de mapper l'url /locations/{locationId}/edit.html - qui semble fonctionner avec ce code:

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

Appelez les résultats mentionnés dans une exception:

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

Est-ce que j'utilise l'annotation @PathVariable de manière incorrecte?

Comment l'utiliser correctement?

22
dtrunk

il devrait être @PathVariable("locationId") int locationId

34
Moinul Hossain

Vous devez ajouter l’argument value à votre @PathVariable , par exemple, 

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

JDK 7 permet l'introspection de nom de fichier

Le paramètre nomutilisateur exposition est disponible dans JDK7, sinon vous devez le définir dans l'annotation.

Vous devez utiliser l'exposition JDK avant de l'utiliser explicitement (comme Johan et Moniul l'ont suggéré) dans le cadre de l'annotation, car si vous souhaitez modifier la clé de paramètre, vous devez éditer uniquement le nom de la variable et pas toute autre occurrence dans les spécifications d'annotation dans d'autres lignes et/ou classes. Appelons cela une source unique de vérité.

0
Peter Rader