Spring mvc @PathVariable

125

Czy możesz mi dać krótkie wyjaśnienie i próbkę użycia @PathVariablewiosennego mvc? Proszę podać, w jaki sposób wpisujesz adres URL?
Mam problem ze znalezieniem odpowiedniego adresu URL, aby wyświetlić stronę jsp. Dzięki.

James
źródło
1
pokazanie jsp przez sprężynowy kontroler mvc odbywa się za pomocą widoku lub powiedz ModelAndView. @PathVariableadnotacja używana do uzyskania nazwy zmiennej i jej wartości na końcu kontrolera. np. www.abcd.com/api/value=34455&anotherValue=skjdfjhks tutaj value, a anotherValue jest zmienną, którą można uzyskać za pomocą @PathVariable ("value") int value i @PathVariable ("anotherValue") String anotherValue
agpt

Odpowiedzi:

221

załóżmy, że chcesz napisać adres URL, aby pobrać jakieś zamówienie, możesz powiedzieć

www.mydomain.com/order/123

gdzie 123 to orderId.

Więc teraz będzie wyglądał adres URL, którego będziesz używać wiosną kontrolera MVC

/order/{orderId}

Teraz identyfikator zamówienia można zadeklarować jako zmienną ścieżki

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

jeśli używasz adresu URL www.mydomain.com/order/123, zmienna orderId zostanie uzupełniona wartością 123 do wiosny

Należy również zauważyć, że zmienna PathVariable różni się od requestParam, ponieważ zmienna pathVariable jest częścią adresu URL. Wyglądałby taki sam adres URL korzystający z parametru żądania www.mydomain.com/order?orderId=123

Oficjalna referencja API DOC
Spring

koder
źródło
w używaniu pathVariable. czy muszę coś zaimportować? czy jakakolwiek zależność? dzięki.
james
wystarczy zaimportować adnotację PathVariable import org.springframework.web.bind.annotation.PathVariable
koder
tak, podaj trochę szczegółów, co próbujesz zrobić i jaki jest problem
koder
Chcę mieć www.mydomain.com/order/abc.def, teraz w kontrolerze otrzymuję tylko abc
prem30488
10

Spójrz na poniższy fragment kodu.

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

Mam nadzieję, że pomoże to w konstruowaniu kodu.

Ashu
źródło
nie jestem zaznajomiony z modelem i widokiem. hehe. dzięki btw .. nie mogę się doczekać wdrożenia tego w moim projekcie .. ale najpierw muszę to skończyć. :)
james
Myślę, że musisz napisać @PathVariable ("typ"), aby powiązać ze ścieżką.
FelixM
1
Chcę mieć www.mydomain.com/order/abc.def, teraz w kontrolerze otrzymuję tylko abc
prem30488
1
dostałem użyte
wyrażenie regularne
8

Jeśli masz adres URL ze zmiennymi ścieżkami, na przykład www.myexampl.com/item/12/update, gdzie 12 to identyfikator, a create to zmienna, której chcesz użyć do określenia wykonania, na przykład przy użyciu pojedynczego formularza do wykonania aktualizacji i tworzyć, robisz to w swoim kontrolerze.

   @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";
    }
ochiWlad
źródło
Ten mechanizm zapewnia, że ​​zmienna ścieżki jest powiązana z daną zmienną.
ochiWlad
2

@PathVariable służy do pobierania wartości z adresu URL

na przykład: Aby uzyskać jakieś pytanie

www.stackoverflow.com/questions/19803731

Tutaj pewne pytanie idjest przekazywane jako parametr w adresie URL

Teraz, aby pobrać tę wartość, controllerwszystko, co musisz zrobić, to po prostu przekazać @PathVariable w parametrze metody

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}
Anway Bhutkar
źródło
Jak wygląda formularz do tego? Czy mogę użyć jednej z wartości wejściowych do określenia wartości {ISBN}? Jeśli tak, w jaki sposób mogę utworzyć pełny adres URL dla parametru formularza th: action?
Jan Horčička
1

Adnotacja wskazująca, że ​​parametr metody powinien być powiązany ze zmienną szablonu URI. Obsługiwane dla metod obsługi z adnotacjami 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;
}
0gam
źródło
0

Załóżmy, że trafiłeś na adres URL www.example.com/test/111. Teraz musisz pobrać wartość 111 (która jest dynamiczna) do metody kontrolera. W tym czasie będziesz używać @PathVariable w następujący sposób:

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

Więc wartość zmiennej jest pobierana z adresu URL

Gagan
źródło
0

Jest to jedna z adnotacji używanych do mapowania / obsługi dynamicznych identyfikatorów URI. Możesz nawet określić wyrażenie regularne dla parametru dynamicznego URI, aby akceptować tylko określony typ danych wejściowych.

Na przykład, jeśli adres URL do pobrania książki przy użyciu unikalnego numeru to:

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

Numer znajdujący się na końcu adresu URL można pobrać za pomocą @PathVariable, jak pokazano:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Krótko mówiąc, to po prostu kolejny sposób na wyodrębnienie danych z żądań HTTP na wiosnę.

Arahan Jha
źródło
Jak wygląda formularz do tego? Czy mogę użyć jednej z wartości wejściowych do określenia wartości {ISBN}? Jeśli tak, w jaki sposób mogę utworzyć pełny adres URL dla parametru formularza th: action?
Jan Horčička
-1

spójrz na poniższy fragment kodu.

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

Jeśli chcesz, aby cały projekt zobaczył, jak to działa, pobierz go z poniższego linku: -

Projekt UserInfo w GitLab

Saurabh Juneja
źródło