我是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";
}
}
因此,此方法处理针对网址 / users?register 的HTTP请求,其中注册是一个参数(因为整个类处理对 / 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}”)。
第一个例子的含义是否相同?
答案 0 :(得分:6)
不,它们是完全不同的结构:
@Controller
@RequestMapping(value = "/users")
public class UserController {
@RequestMapping(params = "register")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
在这种情况下,当在URL createForm
发出HTTP请求时,将调用/users?register
方法。从Spring Javadoc引用,意味着无论register
HTTP参数的值是什么,都会调用此方法;它必须存在。
" myParam"还支持样式表达式,这些参数必须存在于请求中(允许具有任何值)。
@Controller
public class UserController {
@RequestMapping("/users/{register}")
public String createForm(Model model) {
model.addAttribute("user", new Customer());
return "user/register";
}
}
在这种情况下,@RequestMapping
将register
声明为PathVariable
。如果在网址createForm
处发出HTTP请求,则会调用方法/users/something
,无论something
如何。您实际上可以像这样检索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";
}