【问题标题】:Spring mvc @PathVariableSpring mvc @PathVariable
【发布时间】:2013-11-17 04:43:56
【问题描述】:

你能给我一个简单的解释和一个在spring mvc中使用@PathVariable的例子吗?请附上您输入网址的方式?
我正在努力获得正确的 url 来显示 jsp 页面。谢谢。

【问题讨论】:

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

标签: spring-mvc


【解决方案1】:

看看下面的代码sn-p。

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

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

【讨论】:

  • 我不熟悉模型和视图。呵呵。谢谢顺便说一句..期待在我的项目中实施这个..但我需要先完成它。 :)
  • 我认为你需要编写@PathVariable("type") 来绑定路径。
  • 我想拥有 www.mydomain.com/order/abc.def,现在在控制器中我只得到 abc
  • 得到它使用正则表达式 [a-zA-z0-9.]
【解决方案2】:

如果您有带有路径变量的 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";
    }

【讨论】:

  • 此机制确保路径变量与给定变量绑定。
【解决方案3】:

它是用于映射/处理动态 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?
【解决方案4】:

@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?
【解决方案5】:

指示方法参数应绑定到 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;
}

【讨论】:

    【解决方案6】:

    假设你想写一个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
    }
    

    如果您使用 url www.mydomain.com/order/123,则 orderId 变量将由 spring 填充值 123

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

    API DOC
    Spring Official Reference

    【讨论】:

    • 在使用 pathVariable。我需要导入一些东西吗?或任何依赖?谢谢。
    • 只需要import PathVariable注解import org.springframework.web.bind.annotation.PathVariable
    • 是的,请提供一些详细信息,您尝试做什么以及问题是什么
    • 我想要 www.mydomain.com/order/abc.def,现在在控制器中我只得到 abc
    【解决方案7】:

    让我们假设您点击的网址为 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中检索出来的

    【讨论】:

      【解决方案8】:

      看看下面的代码sn-p。

      @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 Project on GitLab

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        • 2015-04-30
        • 2012-08-30
        • 2012-07-06
        • 2014-03-15
        相关资源
        最近更新 更多