春天mvc @PathVariable


125

您能给我一个简短的解释和@PathVariable在Spring MVC 中使用的示例吗?请附上您输入网址的方式?
我正在努力获取正确的URL以显示jsp页面。谢谢。


1
通过spring mvc控制器显示jsp是通过view或say完成的ModelAndView@PathVariable用于在控制器端获取变量名称及其值的注释。例如www.abcd.com/api/value=34455&anotherValue=skjdfjhks这里的valueanotherValue是变量,您可以使用@PathVariable(“ value”)int值和@PathVariable(“ anotherValue”)String anotherValue
agpt

Answers:


221

假设您想写一个URL来获取一些命令,您可以说

www.mydomain.com/order/123

其中123是orderId。

所以现在您将在spring mvc控制器中使用的url看起来像

/order/{orderId}

现在可以将订单ID声明为路径变量

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

如果您使用网址www.mydomain.com/order/123,则spring之前的orderId变量将由值123填充

另请注意,PathVariable与requestParam不同,因为pathVariable是URL的一部分。使用请求参数的相同网址看起来像 www.mydomain.com/order?orderId=123

API DOC
Spring官方参考


在使用pathVariable中。我需要导入什么东西吗?或任何依赖?谢谢。
詹姆斯

您只需要导入PathVariable批注导入org.springframework.web.bind.annotation.PathVariable
编码器,

是的,提供了一些详细信息,您要执行的操作以及问题所在
编码器


我想拥有www.mydomain.com/order/abc.def,现在在控制器中我只得到abc
prem30488 2014年

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

希望它有助于构建您的代码。


我不熟悉模型和视图。呵呵。谢谢顺便说一句..期待在我的项目上实现这一点..但我需要先完成它。:)
james

我认为您需要编写@PathVariable(“ type”)绑定到路径。
FelixM 2014年

1
我想拥有www.mydomain.com/order/abc.def,现在在控制器中我只得到abc
prem30488 2014年

1
使用正则表达式[a-zA-z0-9。]
prem30488

8

如果您的网址带有路径变量,例如www.myexampl.com/item/12/update,其中id是12,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}值吗?如果是,如何为表单参数th:action构建完整的URL?
JanHorč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

让我们假设您输入的网址为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

可以使用@PathVariable获取URL末尾表示的数字,如下所示:

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

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

Model model){

model.addAttribute("ISBN", id);

return "bookDetails";

}

简而言之,这只是在Spring中从HTTP请求中提取数据。


该表格的外观如何?我可以使用输入值之一来指定{ISBN}值吗?如果是,如何为表单参数th:action构建完整的URL?
JanHorč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);      
    }

如果您希望整个项目了解其工作原理,请从以下链接下载它:-

GitLab上的UserInfo项目

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.