我是 Spring MVC 的新手,我有以下疑问。
在 Controller 中,我有一个以这种方式注释的方法:
@Controller
@RequestMapping(value = "/users")
public class UserController {
@RequestMapping(params = "register")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
因此,此方法处理对 URL /users?register 的 HTTP 请求,其中 register 是一个参数(因为整个类处理对 /users 的请求)强>资源)。
如果我使用以下语法而不是使用params =“register”,这是否是同样的事情:
@Controller
public class UserController {
@RequestMapping("/users/{register}")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
我已删除类级别的映射,并使用 @RequestMapping("/users/{register}")。
和第一个例子的意思一样吗?
最佳答案
不,它们是完全不同的结构:
代码1
@Controller
@RequestMapping(value = "/users")
public class UserController {
@RequestMapping(params = "register")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
在这种情况下,当在 URL /users?register
发出 HTTP 请求时,将调用 createForm
方法。引用自Spring Javadoc ,这意味着无论 register
HTTP 参数的值是什么,都会调用此方法;它只需要存在即可。
"myParam" style expressions are also supported, with such parameters having to be present in the request (allowed to have any value).
代码2
@Controller
public class UserController {
@RequestMapping("/users/{register}")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
在本例中,@RequestMapping
将 register
声明为 PathVariable
。如果在 URL /users/something
处发出 HTTP 请求,则将调用 createForm
方法,无论 something
是什么。您实际上可以像这样检索这个东西
:
@RequestMapping("/users/{register}")
public String createForm(@PathVariable("register") String register, Model model) {
// here "register" will have value "something".
model.addAttribute("user", new Customer());
return "user/register";
}
关于java - 两个@RequestMapping注解的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32298598/