Spring mvc @PathVariable

125

Bisakah Anda memberi saya penjelasan singkat dan contoh dalam menggunakan @PathVariabledi musim semi MVC? Harap sertakan bagaimana Anda mengetik url?
Saya kesulitan mendapatkan url yang tepat untuk menampilkan halaman jsp. Terima kasih.

james
sumber
1
menampilkan jsp melalui pegas mvc controller dilakukan melalui view atau say ModelAndView. @PathVariablepenjelasan digunakan untuk mendapatkan nama variabel dan nilainya di ujung pengontrol. misalnya www.abcd.com/api/value=34455&anotherValue=skjdfjhks di sini nilai dan anotherValue adalah variabel yang dapat Anda peroleh menggunakan nilai int @PathVariable ("value") dan @PathVariable ("anotherValue") String anotherValue
agpt

Jawaban:

221

misalkan Anda ingin menulis url untuk mengambil beberapa pesanan, Anda dapat berkata

www.mydomain.com/order/123

dengan 123 adalah orderId.

Jadi sekarang url yang akan Anda gunakan di pegas pengontrol mvc akan terlihat seperti

/order/{orderId}

Sekarang order id dapat dideklarasikan sebagai variabel path

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

Jika Anda menggunakan url www.mydomain.com/order/123, maka variabel orderId akan diisi dengan nilai 123 pada musim semi

Perhatikan juga bahwa PathVariable berbeda dari requestParam karena pathVariable adalah bagian dari URL. Url yang sama menggunakan parameter permintaan akan terlihat seperti ini www.mydomain.com/order?orderId=123

Referensi Resmi API DOC
Spring

pembuat kode
sumber
dalam menggunakan pathVariable. apakah saya perlu mengimpor sesuatu? atau ketergantungan apapun? Terima kasih.
James
Anda hanya perlu mengimpor penjelasan PathVariable import org.springframework.web.bind.annotation.PathVariable
coder
ya berikan beberapa detail, apa yang Anda coba lakukan dan apa masalahnya
kode
Saya ingin memiliki www.mydomain.com/order/abc.def, sekarang di controller saya hanya mendapatkan abc
prem30488
10

Lihat cuplikan kode di bawah ini.

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

Semoga membantu dalam membangun kode Anda.

Ashu
sumber
Saya tidak terbiasa dengan model dan tampilan. hehe. terima kasih btw .. melihat ke depan untuk menerapkan ini pada proyek saya .. tetapi saya harus menyelesaikannya terlebih dahulu. :)
james
Saya pikir Anda perlu menulis @PathVariable ("type") untuk menghubungkan ke jalur.
FelixM
1
Saya ingin memiliki www.mydomain.com/order/abc.def, sekarang di controller saya hanya mendapatkan abc
prem30488
1
mendapatkannya digunakan regexp [a-zA-z0-9.]
prem30488
8

Jika Anda memiliki url dengan variabel jalur, contoh www.myexampl.com/item/12/update di mana 12 adalah id dan create adalah variabel yang ingin Anda gunakan untuk menentukan eksekusi Anda misalnya dalam menggunakan satu formulir untuk melakukan pembaruan dan buat, Anda melakukan ini di pengontrol Anda.

   @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
sumber
Mekanisme ini memastikan bahwa variabel jalur terikat ke variabel tertentu.
ochiWlad
2

@PathVariable digunakan untuk mengambil nilai dari URL

Misalnya: Untuk mendapatkan beberapa pertanyaan

www.stackoverflow.com/questions/19803731

Di sini beberapa pertanyaan iddilewatkan sebagai parameter di URL

Sekarang untuk mengambil nilai ini, yang controllerharus Anda lakukan hanyalah meneruskan @PathVariable dalam parameter metode

@RequestMapping(value = " /questions/{questionId}", method=RequestMethod.GET)
    public String getQuestion(@PathVariable String questionId){
    //return question details
}
Anway Bhutkar
sumber
Bagaimana bentuk formulir ini? Dapatkah saya menggunakan salah satu nilai masukan untuk menentukan nilai {ISBN}? Jika ya, bagaimana cara membuat URL lengkap untuk parameter formulir th: action?
Jan Horčička
1

Anotasi yang menunjukkan bahwa parameter metode harus terikat ke variabel template URI. Didukung untuk metode penangan beranotasi 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
sumber
0

Mari kita asumsikan Anda menekan url sebagai www.example.com/test/111. Sekarang Anda harus mengambil nilai 111 (yang dinamis) ke metode pengontrol. Saat ini Anda akan menggunakan @PathVariable sebagai berikut:

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

SO nilai variabel diambil dari url

Gagan
sumber
0

Ini adalah salah satu anotasi yang digunakan untuk memetakan / menangani URI dinamis. Anda bahkan dapat menetapkan ekspresi reguler untuk parameter dinamis URI agar hanya menerima jenis masukan tertentu.

Misalnya, jika URL untuk mengambil buku menggunakan nomor unik adalah:

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

Angka yang dilambangkan di akhir URL dapat diambil menggunakan @PathVariable seperti yang ditunjukkan:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Singkatnya, ini hanyalah mengekstrak data dari permintaan HTTP di Spring.

Arahan Jha
sumber
Bagaimana bentuk formulir ini? Dapatkah saya menggunakan salah satu nilai masukan untuk menentukan nilai {ISBN}? Jika ya, bagaimana cara membuat URL lengkap untuk parameter formulir th: action?
Jan Horčička
-1

lihat cuplikan kode di bawah ini.

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

Jika Anda ingin proyek lengkap untuk melihat cara kerjanya, unduh dari tautan di bawah ini: -

Proyek UserInfo di GitLab

Saurabh Juneja
sumber