两个@RequestMapping注解的区别
Difference between two @RequestMapping annotations
我是 Spring MVC 的新手,我有以下疑问。
在控制器中,我有一个这样注释的方法:
@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 是一个参数(因为整个 class 处理对 /users 资源的请求。
如果不是使用 params = "register" 我使用以下语法,这是否是一回事:
@Controller
public class UserController {
@RequestMapping("/users/{register}")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
我已经删除了 class 级别的映射,我使用 @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 请求,无论 something
是什么,都会调用方法 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";
}
我是 Spring MVC 的新手,我有以下疑问。
在控制器中,我有一个这样注释的方法:
@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 是一个参数(因为整个 class 处理对 /users 资源的请求。
如果不是使用 params = "register" 我使用以下语法,这是否是一回事:
@Controller
public class UserController {
@RequestMapping("/users/{register}")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
我已经删除了 class 级别的映射,我使用 @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 请求,无论 something
是什么,都会调用方法 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";
}