@PathVariable 和 @ModelAttribute 之间的区别

Van*_*nan 2 spring spring-mvc

我对 SpringFramework 中的 @PathVariable 和 @ModelAttribute 感到困惑。我可以知道它们之间有什么区别吗?

Fre*_*ezY 5

1)@PathVariable

指示方法参数应绑定到 URI 模板变量的注释

例如:您有一个像这样的 URLhttp:/myweb/transferfund/john/john123

@RequestMapping(value = "/transferfund/{user}/john123")
public String index(@PathVariable String user){
System.out.println("Logged User :"+user);
}
Run Code Online (Sandbox Code Playgroud)

根据上面的示例,您可以从 URI 获取变量@PathVariable,在本例中将打印出john。您还可以像这样获取 URI 的另一部分;

@RequestMapping(value = "/transferfund/john/{userID}")
@RequestMapping(value = "/{transaction}/john/john123")
Run Code Online (Sandbox Code Playgroud)

你甚至可以这样做:

@RequestMapping(value = "/{transaction}")
Run Code Online (Sandbox Code Playgroud)

它将捕获任何没有自己的 URl@RequestMapping

2)@ModelAttribute

将方法参数或方法返回值绑定到公开给 Web 视图的命名模型属性的注释

例如:您有一种形式:

<form:form action="/addUser" modelAttribute="userInfo">
<form:input path="name" value="John Doe">
<form:input path="id" value="john123">
</form:form>
Run Code Online (Sandbox Code Playgroud)

而在你的@RequestMapping

 @RequestMapping(value = "/addUser")
        public String index(@ModelAttribute("userInfo") User userinfo){
        System.out.println("Registered User :"+userinfo.getUserName());
        }
Run Code Online (Sandbox Code Playgroud)

根据示例,系统将打印出Registered User : John Doe But you need this spring taglib to use @ModelAttribute

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
Run Code Online (Sandbox Code Playgroud)

玩得开心。