Mùa xuân mvc @PathVariable


125

Bạn có thể cho tôi một lời giải thích ngắn gọn và một mẫu sử dụng @PathVariabletrong mùa xuân mvc không? Vui lòng bao gồm về cách bạn nhập url?
Tôi đang vật lộn để có được url đúng để hiển thị trang jsp. Cảm ơn.


1
hiển thị một jsp thông qua bộ điều khiển mvc mùa xuân được thực hiện thông qua xem hoặc nói ModelAndView. @PathVariablechú thích được sử dụng để có được tên biến và giá trị của nó ở cuối bộ điều khiển. ví dụ www.abcd.com/api/value=34455&anotherValue=skjdfjhks đây giá trịanotherValue có thể thay đổi mà bạn có thể sử dụng @PathVariable ( "giá trị") int giá trị và @PathVariable ( "anotherValue") String anotherValue
agpt

Câu trả lời:


221

giả sử bạn muốn viết một url để lấy một số thứ tự, bạn có thể nói

www.mydomain.com/order/123

Trong đó 123 là orderId.

Vì vậy, bây giờ url bạn sẽ sử dụng trong bộ điều khiển mvc mùa xuân sẽ như thế nào

/order/{orderId}

Bây giờ id thứ tự có thể được khai báo một biến đường dẫn

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

nếu bạn sử dụng url www.mydomain.com/order/123, thì biến orderId sẽ được điền theo giá trị 123 vào mùa xuân

Cũng lưu ý rằng PathVariable khác với requestParam vì pathVariable là một phần của URL. Cùng một url sử dụng param param sẽ giống như www.mydomain.com/order?orderId=123

API DOC
Tham khảo chính thức mùa xuân


trong việc sử dụng pathVariable. tôi có cần nhập gì không? hoặc phụ thuộc nào? cảm ơn.
James

bạn chỉ cần nhập chú thích PathVariable nhập org.springframework.web.bind.annotation.PathVariable
coder

yeah cung cấp một số chi tiết, những gì bạn đang cố gắng làm và vấn đề là gì
coder


Tôi muốn có www.mydomain.com/order/abc.def, hiện tại trong bộ điều khiển tôi chỉ nhận được abc
Prem30488

10

Có một cái nhìn vào đoạn mã dưới đây.

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

Hy vọng nó sẽ giúp xây dựng mã của bạn.


tôi không quen thuộc với mô hình và xem. hehe cảm ơn btw .. mong được thực hiện điều này trong dự án của tôi .. nhưng tôi cần hoàn thành nó trước. :)
james

Tôi nghĩ bạn cần phải viết @PathVariable ("loại") để liên kết với đường dẫn.
FelixM

1
Tôi muốn có www.mydomain.com/order/abc.def, hiện tại trong bộ điều khiển tôi chỉ nhận được abc
Prem30488

1
đã sử dụng regrec [a-zA-z0-9.]
Prem30488

8

Nếu bạn có url với các biến đường dẫn, ví dụ www.myexampl.com/item/12/update trong đó 12 là id và tạo là biến bạn muốn sử dụng để chỉ định thực thi của mình, ví dụ như sử dụng một biểu mẫu để thực hiện cập nhật và tạo, bạn làm điều này trong bộ điều khiển của bạn.

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

Cơ chế này đảm bảo rằng một biến đường dẫn được gắn với một biến nhất định.
ochiWlad

2

@PathVariable được sử dụng để tìm nạp giá trị từ URL

ví dụ: để có được một số câu hỏi

www.stackoverflow.com/questions/19803731

Ở đây một số câu hỏi idđược thông qua dưới dạng tham số trong URL

Bây giờ để tìm nạp giá trị này trong controllertất cả những gì bạn phải làm chỉ là truyền @PathVariable trong tham số phương thức

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

Làm thế nào để hình thức cho điều này trông như thế nào? Tôi có thể sử dụng một trong các giá trị đầu vào để chỉ định giá trị {ISBN} không? Nếu có, làm cách nào để tạo URL đầy đủ cho tham số biểu mẫu th: hành động?
Jan Horčička

1

Chú thích chỉ ra rằng một tham số phương thức nên được liên kết với biến mẫu URI. Được hỗ trợ cho các phương thức xử lý chú thích 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

Giả sử bạn nhấn một url là www.example.com/test/111. Bây giờ bạn phải truy xuất giá trị 111 (động) cho phương thức điều khiển của bạn. Đến lúc bạn sẽ sử dụng @PathVariable như sau:

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

Vì vậy, giá trị biến được lấy từ url


0

Đây là một trong những chú thích được sử dụng để ánh xạ / xử lý các URI động. Thậm chí, bạn có thể chỉ định biểu thức chính quy cho tham số động URI để chỉ chấp nhận loại đầu vào cụ thể.

Ví dụ: nếu URL để truy xuất sách bằng một số duy nhất sẽ là:

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

Số được biểu thị ở cuối URL có thể được tìm nạp bằng @PathVariable như được hiển thị:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

Nói tóm lại, chỉ cần trích xuất dữ liệu từ các yêu cầu HTTP trong Spring.


Làm thế nào để hình thức cho điều này trông như thế nào? Tôi có thể sử dụng một trong các giá trị đầu vào để chỉ định giá trị {ISBN} không? Nếu có, làm cách nào để tạo URL đầy đủ cho tham số biểu mẫu th: hành động?
Jan Horčička

-1

có một cái nhìn vào đoạn mã dưới đây.

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

Nếu bạn muốn dự án hoàn chỉnh để xem nó hoạt động như thế nào thì hãy tải xuống từ liên kết bên dưới: -

Dự án UserInfo trên GitLab

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.