Spring mvc @PathVariable


125

Potete darmi una breve spiegazione e un esempio nell'uso @PathVariabledel mvc primaverile? Si prega di includere su come si digita l'URL?
Sto lottando per ottenere l'URL giusto per mostrare la pagina jsp. Grazie.


1
la visualizzazione di un controller jvc tramite mvc a molla viene eseguita tramite view o say ModelAndView. @PathVariableannotazione utilizzata per ottenere il nome della variabile e il suo valore alla fine del controller. ad esempio www.abcd.com/api/value=34455&anotherValue=skjdfjhks qui il valore e anotherValue è variabile che si può ottenere utilizzando @PathVariable ( "valore") il valore int e @PathVariable ( "anotherValue") String anotherValue
agpt

Risposte:


221

supponiamo che tu voglia scrivere un URL per recuperare un po 'di ordine, puoi dire

www.mydomain.com/order/123

dove 123 è orderId.

Quindi ora apparirà l'URL che userai nel controller mvc di primavera

/order/{orderId}

Ora l'ID ordine può essere dichiarato una variabile di percorso

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

se usi l'URL www.mydomain.com/order/123, la variabile orderId verrà popolata dal valore 123 entro la primavera

Si noti inoltre che PathVariable differisce da requestParam poiché pathVariable fa parte dell'URL. Lo stesso url usando il parametro request sarebbe simile www.mydomain.com/order?orderId=123

Riferimento ufficiale API DOC
primavera


nell'uso di pathVariable. devo importare qualcosa? o qualche dipendenza? Grazie.
Giacomo,

devi solo importare l'annotazione PathVariable import org.springframework.web.bind.annotation.PathVariable
coder

sì fornire alcuni dettagli, quello che stai cercando di fare e che cosa è la questione
coder


Voglio avere www.mydomain.com/order/abc.def, ora nel controller sto ricevendo solo abc
prem30488

10

Dai un'occhiata allo snippet di codice seguente.

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

Spero che ti aiuti a costruire il tuo codice.


non ho familiarità con il modello e la vista. hehe. grazie btw .. non vedo l'ora di implementarlo sul mio progetto .. ma devo prima finirlo. :)
james

Penso che devi scrivere @PathVariable ("tipo") per legare al percorso.
FelixM,

1
Voglio avere www.mydomain.com/order/abc.def, ora nel controller sto ricevendo solo abc
prem30488

1
ho usato regexp [a-zA-z0-9.]
prem30488

8

Se si dispone di un URL con variabili di percorso, ad esempio www.myexampl.com/item/12/update dove 12 è l'id e creare è la variabile che si desidera utilizzare per specificare l'esecuzione ad esempio utilizzando un singolo modulo per fare un aggiornamento e crea, lo fai nel tuo 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";
    }

Questo meccanismo garantisce che una variabile di percorso sia collegata a una determinata variabile.
ochiWlad,

2

@PathVariable utilizzato per recuperare il valore dall'URL

per esempio: per avere qualche domanda

www.stackoverflow.com/questions/19803731

Qui alcune domande idvengono passate come parametro nell'URL

Ora per recuperare questo valore in controllertutto ciò che devi fare è solo passare @PathVariable nel parametro del metodo

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

Come appare il modulo per questo? Posso utilizzare uno dei valori di input per specificare il valore {ISBN}? Se sì, come posso costruire l'URL completo per il parametro form th: action?
Jan Horčička,

1

Annotazione che indica che un parametro di metodo deve essere associato a una variabile del modello URI. Supportato per i metodi di gestore annotato 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

Supponiamo che tu abbia raggiunto un url come www.example.com/test/111. Ora devi recuperare il valore 111 (che è dinamico) nel metodo del tuo controller. Al momento utilizzerai @PathVariable come segue:

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

Quindi il valore della variabile viene recuperato dall'URL


0

È una delle annotazioni utilizzate per mappare / gestire gli URI dinamici. È anche possibile specificare un'espressione regolare per il parametro dinamico URI per accettare solo un tipo specifico di input.

Ad esempio, se l'URL per recuperare un libro utilizzando un numero univoco sarebbe:

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

Il numero indicato nell'ultimo URL può essere recuperato utilizzando @PathVariable come mostrato:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

In breve, è solo un altro per estrarre i dati dalle richieste HTTP in primavera.


Come appare il modulo per questo? Posso utilizzare uno dei valori di input per specificare il valore {ISBN}? Se sì, come posso costruire l'URL completo per il parametro form th: action?
Jan Horčička,

-1

dai un'occhiata allo snippet di codice seguente.

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

Se vuoi che il progetto completo veda come funziona, scaricalo dal seguente link: -

Progetto UserInfo su GitLab

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.