สปริง mvc @PathVariable


125

ขอคำอธิบายสั้น ๆ และตัวอย่างการใช้งาน@PathVariableสปริง mvc ได้ไหม โปรดระบุว่าคุณพิมพ์ url อย่างไร?
ฉันกำลังดิ้นรนเพื่อให้ได้ url ที่ถูกต้องเพื่อแสดงหน้า jsp ขอบคุณ


1
แสดง JSP ผ่านตัวควบคุมฤดูใบไม้ผลิ MVC ModelAndViewจะทำผ่านมุมมองหรือพูด @PathVariableคำอธิบายประกอบที่ใช้เพื่อรับชื่อตัวแปรและค่าที่ปลายคอนโทรลเลอร์ เช่น www.abcd.com/api/value=34455&anotherValue=skjdfjhks ที่นี่valueและanotherValueเป็นตัวแปรที่คุณสามารถรับได้โดยใช้ @PathVariable ("value") int value และ @PathVariable ("anotherValue") String anotherValue
agpt

คำตอบ:


221

สมมติว่าคุณต้องการเขียน url เพื่อเรียกคำสั่งซื้อคุณสามารถพูดได้

www.mydomain.com/order/123

โดยที่ 123 คือ orderId

ตอนนี้ url ที่คุณจะใช้ใน spring mvc controller จะมีลักษณะดังนี้

/order/{orderId}

ตอนนี้รหัสคำสั่งซื้อสามารถประกาศตัวแปรเส้นทางได้

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

หากคุณใช้ url www.mydomain.com/order/123 ตัวแปร orderId จะถูกเติมด้วยค่า 123 ตามสปริง

โปรดทราบว่า PathVariable แตกต่างจาก requestParam เนื่องจาก pathVariable เป็นส่วนหนึ่งของ URL URL เดียวกันที่ใช้พารามิเตอร์คำขอจะมีลักษณะดังนี้ www.mydomain.com/order?orderId=123

ข้อมูลอ้างอิงอย่างเป็นทางการของAPI DOC
Spring


ในการใช้ pathVariable ต้องนำเข้าอะไรไหม หรือการพึ่งพาใด ๆ ? ขอบคุณ
เจมส์

คุณเพียงแค่ต้องนำเข้าคำอธิบายประกอบ PathVariable import org.springframework.web.bind.annotation.PathVariable
coder

ใช่ให้รายละเอียดบางอย่างสิ่งที่คุณพยายามทำและปัญหาคืออะไร
coder

stackoverflow.com/questions/19804202/… .. นี่คือรหัส
เจมส์

ฉันต้องการมี www.mydomain.com/order/abc.def ตอนนี้ในตัวควบคุมฉันได้รับเฉพาะ abc
prem30488

10

ดูข้อมูลโค้ดด้านล่าง

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

หวังว่าจะช่วยในการสร้างโค้ดของคุณ


ฉันไม่คุ้นเคยกับโมเดลและมุมมอง ฮิฮิ. ขอบคุณ btw .. รอคอยที่จะนำสิ่งนี้ไปใช้ในโครงการของฉัน .. แต่ฉันต้องทำให้เสร็จก่อน :)
เจมส์

ฉันคิดว่าคุณต้องเขียน @PathVariable ("type") เพื่อผูกกับเส้นทาง
FelixM

1
ฉันต้องการมี www.mydomain.com/order/abc.def ตอนนี้ในตัวควบคุมฉันได้รับเฉพาะ abc
prem30488

1
ได้ใช้ regexp [a-zA-
z0-9

8

หากคุณมี url ที่มีตัวแปรพา ธ ตัวอย่างเช่น www.myexampl.com/item/12/update โดยที่ 12 คือ id และ create คือตัวแปรที่คุณต้องการใช้สำหรับระบุการดำเนินการของคุณสำหรับอินสแตนซ์โดยใช้รูปแบบเดียวเพื่อทำการอัพเดตและ สร้างคุณทำสิ่งนี้ในคอนโทรลเลอร์ของคุณ

   @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

2

@PathVariable ใช้เพื่อดึงค่าจาก URL

ตัวอย่างเช่นหากต้องการทราบคำถาม

www.stackoverflow.com/questions/19803731

ต่อไปidนี้คำถามบางส่วนจะถูกส่งเป็นพารามิเตอร์ใน URL

ตอนนี้ในการดึงค่านี้จากcontrollerสิ่งที่คุณต้องทำก็เพียงแค่ส่ง @PathVariable ในพารามิเตอร์วิธีการ

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

แบบฟอร์มสำหรับสิ่งนี้มีลักษณะอย่างไร? ฉันสามารถใช้ค่าที่ป้อนเพื่อระบุค่า {ISBN} ได้หรือไม่ ถ้าใช่ฉันจะสร้าง URL แบบเต็มสำหรับพารามิเตอร์ form th: action ได้อย่างไร
Jan Horčička

1

คำอธิบายประกอบซึ่งระบุว่าพารามิเตอร์เมธอดควรถูกผูกไว้กับตัวแปรเทมเพลต URI รองรับสำหรับเมธอดตัวจัดการคำอธิบายประกอบ 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

สมมติว่าคุณกด url เป็น www.example.com/test/111 ตอนนี้คุณต้องดึงค่า 111 (ซึ่งเป็นไดนามิก) ไปยังเมธอดคอนโทรลเลอร์ของคุณในขณะนี้คุณจะใช้ @PathVariable ดังนี้:

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

ดังนั้นค่าตัวแปรจะถูกดึงมาจาก url


0

เป็นหนึ่งในคำอธิบายประกอบที่ใช้ในการแมป / จัดการ URI แบบไดนามิก คุณยังสามารถระบุนิพจน์ทั่วไปสำหรับพารามิเตอร์ไดนามิก URI เพื่อยอมรับเฉพาะอินพุตที่ระบุเท่านั้น

ตัวอย่างเช่นหาก URL ในการเรียกหนังสือโดยใช้หมายเลขเฉพาะจะเป็น:

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

ตัวเลขที่แสดงอยู่ท้าย URL สามารถดึงข้อมูลได้โดยใช้ @PathVariable ดังที่แสดง:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

ในระยะสั้นมันเป็นเพียงการดึงข้อมูลจากคำขอ HTTP ใน Spring


แบบฟอร์มสำหรับสิ่งนี้มีลักษณะอย่างไร? ฉันสามารถใช้ค่าที่ป้อนเพื่อระบุค่า {ISBN} ได้หรือไม่ ถ้าใช่ฉันจะสร้าง URL แบบเต็มสำหรับพารามิเตอร์ form th: action ได้อย่างไร
Jan Horčička

-1

ดูข้อมูลโค้ดด้านล่าง

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

หากคุณต้องการให้โครงการสมบูรณ์เพื่อดูว่ามันทำงานอย่างไรให้ดาวน์โหลดจากลิงค์ด้านล่าง: -

โครงการ UserInfo บน GitLab

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.