Frühling mvc @PathVariable


125

Können Sie mir eine kurze Erklärung und ein Beispiel für die Verwendung @PathVariableim Frühjahr mvc geben? Bitte geben Sie an, wie Sie die URL eingeben.
Ich habe Probleme, die richtige URL für die Anzeige der JSP-Seite zu finden. Vielen Dank.


1
Das Anzeigen eines Jsp-Through-Spring-MVC-Controllers erfolgt über View oder Say ModelAndView. @PathVariableAnmerkung, die verwendet wird, um den Variablennamen und seinen Wert am Ende des Controllers abzurufen. zB www.abcd.com/api/value=34455&anotherValue=skjdfjhks hier value und anotherValue ist eine Variable, die Sie mit @PathVariable ("value") int value und @PathVariable ("anotherValue") String anotherValue
agpt

Antworten:


221

Angenommen, Sie möchten eine URL schreiben, um eine Bestellung abzurufen, können Sie sagen

www.mydomain.com/order/123

Dabei ist 123 orderId.

So, jetzt würde die URL, die Sie im Frühjahr mvc Controller verwenden, aussehen

/order/{orderId}

Jetzt kann die Auftrags-ID als Pfadvariable deklariert werden

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

Wenn Sie die URL www.mydomain.com/order/123 verwenden, wird die Variable orderId bis zum Frühjahr mit dem Wert 123 gefüllt

Beachten Sie auch, dass sich PathVariable von requestParam unterscheidet, da pathVariable Teil der URL ist. Die gleiche URL mit request param würde aussehen www.mydomain.com/order?orderId=123

Offizielle Referenz zu API DOC
Spring


bei der Verwendung von pathVariable. muss ich etwas importieren oder irgendeine Abhängigkeit? Vielen Dank.
James

Sie müssen nur PathVariable Annotation importieren import org.springframework.web.bind.annotation.PathVariable
Codierer

Ja, geben Sie einige Details an, was Sie versuchen zu tun und was das Problem ist
Codierer


Ich möchte www.mydomain.com/order/abc.def haben, jetzt in Controller bekomme ich nur abc
prem30488

10

Schauen Sie sich das folgende Code-Snippet an.

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

Hoffe, es hilft bei der Erstellung Ihres Codes.


Ich bin nicht vertraut mit Modell und Ansicht. hehe. Danke übrigens. Ich freue mich darauf, dies in meinem Projekt umzusetzen. Aber ich muss es zuerst beenden. :)
James

Ich denke, Sie müssen @PathVariable ("Typ") schreiben, um sich an den Pfad zu binden.
FelixM

1
Ich möchte www.mydomain.com/order/abc.def haben, jetzt in Controller bekomme ich nur abc
prem30488

1
habe es benutzt regexp [a-zA-z0-9.]
prem30488

8

Wenn Sie eine URL mit Pfadvariablen haben, z. B. www.myexampl.com/item/12/update, wobei 12 die ID und create die Variable ist, die Sie zum Festlegen Ihrer Ausführung verwenden möchten, z. B. wenn Sie ein einzelnes Formular verwenden, um ein Update durchzuführen, und erstellen, tun Sie dies in Ihrem Controller.

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

Dieser Mechanismus stellt sicher, dass eine Pfadvariable an eine bestimmte Variable gebunden ist.
ochiWlad

2

@PathVariable wird verwendet, um den Wert von der URL abzurufen

Zum Beispiel: Um eine Frage zu bekommen

www.stackoverflow.com/questions/19803731

Hier eine Frage id als Parameter in der URL übergeben

controllerUm diesen Wert abzurufen , müssen Sie lediglich @PathVariable im Methodenparameter übergeben

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

Wie sieht das Formular dafür aus? Kann ich einen der Eingabewerte verwenden, um den Wert {ISBN} anzugeben? Wenn ja, wie erstelle ich die vollständige URL für den Formularparameter th: action?
Jan Horčička

1

Anmerkung, die angibt, dass ein Methodenparameter an eine URI-Vorlagenvariable gebunden werden soll. Unterstützt für mit RequestMapping versehene Handlermethoden.

@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

Nehmen wir an, Sie haben eine URL als www.example.com/test/111 aufgerufen. Jetzt müssen Sie den Wert 111 (der dynamisch ist) für Ihre Controller-Methode abrufen. Zu der Zeit werden Sie @PathVariable wie folgt verwenden:

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

SO wird der Variablenwert aus der URL abgerufen


0

Dies ist eine der Anmerkungen, die zum Zuordnen / Behandeln dynamischer URIs verwendet werden. Sie können sogar einen regulären Ausdruck für den dynamischen URI-Parameter angeben, um nur einen bestimmten Eingabetyp zu akzeptieren.

Wenn die URL zum Abrufen eines Buches unter Verwendung einer eindeutigen Nummer beispielsweise wie folgt lautet:

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

Die am letzten Ende der URL angegebene Nummer kann mit @PathVariable wie folgt abgerufen werden:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Kurz gesagt, es ist nur eine weitere Aufgabe, im Frühjahr Daten aus HTTP-Anforderungen zu extrahieren.


Wie sieht das Formular dafür aus? Kann ich einen der Eingabewerte verwenden, um den Wert {ISBN} anzugeben? Wenn ja, wie erstelle ich die vollständige URL für den Formularparameter th: action?
Jan Horčička

-1

Schauen Sie sich das folgende Code-Snippet an.

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

Wenn Sie möchten, dass das gesamte Projekt funktioniert, laden Sie es über den folgenden Link herunter: -

UserInfo Project auf GitLab

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.