java - 两个@RequestMapping注解的区别

标签 java spring spring-mvc annotations request-mapping

我是 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";
    } 

}

在本例中,@RequestMappingregister 声明为 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/

相关文章:

java - 如何在 Spring 中创建多 Web 模块应用程序?

java - J对话框没有获得焦点

java - CloseHandle((Handle)端口)没有返回

java - 将 XML 实体映射到 Java 对象

java - 在 JBoss 7 beta 上部署 Spring 3 + Hibernate 应用程序;未找到带注释的 Bean

javascript - 如何停止重新加载 JavaScript

java - JSTL 用 HTML 标签替换变量中的字符

java - 如何从 JSON 文件解析 JAVA ArrayList

java - Spring MVC Controller : what is the difference between "return forward", "return redirect"和 "return jsp file"

java - 为什么我不能输入空值?