Spring mvc @PathVariable

Posted

技术标签:

【中文标题】Spring 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 【参考方案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.***.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 是的,请提供一些详细信息,您尝试做什么以及问题是什么 ***.com/questions/19804202/….. 这是代码 我想要 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

【讨论】:

以上是关于Spring mvc @PathVariable的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC学习—MVC的介绍以及Spring MVC的入门案例

spring mvc怎么存cookie

Spring MVC系列初识Spring MVC

spring mvc中 Circular view path 问题

Spring MVC 框架学习---- 我的第一个 Spring MVC 程序

springmvc 3.0啥时间发部