Spring MVC @PathVariable


125

Pouvez-vous me donner une brève explication et un exemple d'utilisation @PathVariableau printemps mvc? Veuillez indiquer comment vous tapez l'URL?
J'ai du mal à trouver la bonne URL pour afficher la page jsp. Merci.


1
montrant un jsp à travers le contrôleur mvc de ressort se fait par la vue ou par dire ModelAndView. @PathVariableannotation utilisée pour obtenir le nom de la variable et sa valeur à la fin du contrôleur. par exemple www.abcd.com/api/value=34455&anotherValue=skjdfjhks ici value et anotherValue est une variable que vous pouvez obtenir en utilisant @PathVariable ("value") int value et @PathVariable ("anotherValue") String anotherValue
agpt

Réponses:


221

supposons que vous vouliez écrire une URL pour récupérer de l'ordre, vous pouvez dire

www.mydomain.com/order/123

où 123 est orderId.

Alors maintenant, l'URL que vous utiliserez dans le contrôleur mvc de printemps ressemblerait à

/order/{orderId}

Maintenant, l'ID de commande peut être déclaré une variable de chemin

@RequestMapping(value = " /order/{orderId}", method=RequestMethod.GET)
public String getOrder(@PathVariable String orderId){
//fetch order
}

si vous utilisez l'url www.mondomaine.com/order/123, la variable orderId sera renseignée par la valeur 123 au printemps

Notez également que PathVariable diffère de requestParam car pathVariable fait partie de l'URL. La même URL utilisant le paramètre de requête ressemblerait à www.mydomain.com/order?orderId=123

Référence officielle API DOC
Spring


en utilisant pathVariable. dois-je importer quelque chose? ou toute dépendance? Merci.
james

il vous suffit d'importer les annotations PathVariable import org.springframework.web.bind.annotation.PathVariable
codeur

oui, donnez quelques détails, ce que vous essayez de faire et quel est le problème
codeur


Je veux avoir www.mondomaine.com/order/abc.def, maintenant dans le contrôleur, je ne reçois que abc
prem30488

10

Jetez un œil à l'extrait de code ci-dessous.

@RequestMapping(value="/Add/{type}")
public ModelAndView addForm(@PathVariable String type ){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("addContent");
    modelAndView.addObject("typelist",contentPropertyDAO.getType() );
    modelAndView.addObject("property",contentPropertyDAO.get(type,0) );
    return modelAndView;
}

J'espère que cela aidera à construire votre code.


Im pas familier avec le modèle et la vue. hehe. merci btw .. hâte de mettre en œuvre cela sur mon projet .. mais je dois le terminer en premier. :)
james

Je pense que vous devez écrire @PathVariable ("type") pour se lier au chemin.
FelixM

1
Je veux avoir www.mondomaine.com/order/abc.def, maintenant dans le contrôleur, je ne reçois que abc
prem30488

1
je l'ai utilisé regexp [a-zA-z0-9.]
prem30488

8

Si vous avez une URL avec des variables de chemin, par exemple www.myexampl.com/item/12/update où 12 est l'id et create est la variable que vous souhaitez utiliser pour spécifier votre exécution, par exemple en utilisant un seul formulaire pour faire une mise à jour et create, vous faites cela dans votre contrôleur.

   @PostMapping(value = "/item/{id}/{method}")
    public String getForm(@PathVariable("id") String itemId ,  
        @PathVariable("method") String methodCall , Model model){

     if(methodCall.equals("create")){
            //logic
      }
     if(methodCall.equals("update")){
            //logic
      }

      return "path to your form";
    }

Ce mécanisme garantit qu'une variable de chemin est liée à une variable donnée.
ochiWlad

2

@PathVariable utilisé pour récupérer la valeur de l'URL

par exemple: pour avoir une question

www.stackoverflow.com/questions/19803731

Ici, une question idest passée en paramètre dans l'URL

Maintenant, pour récupérer cette valeur, controllertout ce que vous avez à faire est simplement de passer @PathVariable dans le paramètre de méthode

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}

À quoi ressemble le formulaire pour cela? Puis-je utiliser l'une des valeurs d'entrée pour spécifier la valeur {ISBN}? Si oui, comment construire l'URL complète pour le paramètre de formulaire th: action?
Jan Horčička le

1

Annotation qui indique qu'un paramètre de méthode doit être lié à une variable de modèle d'URI. Pris en charge pour les méthodes de gestionnaire annotées RequestMapping.

@RequestMapping(value = "/download/{documentId}", method = RequestMethod.GET)
public ModelAndView download(@PathVariable int documentId) {
    ModelAndView mav = new ModelAndView();
    Document document =  documentService.fileDownload(documentId);

    mav.addObject("downloadDocument", document);
    mav.setViewName("download");

    return mav;
}

0

Supposons que vous atteigniez une URL comme www.example.com/test/111. Vous devez maintenant récupérer la valeur 111 (qui est dynamique) dans votre méthode de contrôleur. Au moment où vous utiliserez @PathVariable comme suit:

@RequestMapping(value = " /test/{testvalue}", method=RequestMethod.GET)
public void test(@PathVariable String testvalue){
//you can use test value here
}

SO la valeur de la variable est extraite de l'url


0

C'est l'une des annotations utilisées pour mapper / gérer les URI dynamiques. Vous pouvez même spécifier une expression régulière pour que le paramètre dynamique d'URI n'accepte qu'un type d'entrée spécifique.

Par exemple, si l'URL pour récupérer un livre en utilisant un numéro unique serait:

URL:http://localhost:8080/book/9783827319333

Le numéro indiqué au dernier de l'URL peut être récupéré en utilisant @PathVariable comme indiqué:

@RequestMapping(value="/book/{ISBN}", method= RequestMethod.GET)

public String showBookDetails(@PathVariable("ISBN") String id,

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

En bref, il s'agit simplement d'extraire des données à partir de requêtes HTTP au printemps.


À quoi ressemble le formulaire pour cela? Puis-je utiliser l'une des valeurs d'entrée pour spécifier la valeur {ISBN}? Si oui, comment construire l'URL complète pour le paramètre de formulaire th: action?
Jan Horčička le

-1

jetez un œil à l'extrait de code ci-dessous.

@RequestMapping(value = "edit.htm", method = RequestMethod.GET) 
    public ModelAndView edit(@RequestParam("id") String id) throws Exception {
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("user", userinfoDao.findById(id));
        return new ModelAndView("edit", modelMap);      
    }

Si vous voulez que le projet complet voie comment cela fonctionne, téléchargez-le à partir du lien ci-dessous: -

Projet UserInfo sur GitLab

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.