Spring MVC注解—@ RequestMapping用法

序言

Spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用@RequestMapping注解类型,它用于映射一个请求或一个方法。使用时,可以标注在一个方法或一个类上。
在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置的映射作用一致。

<servlet>
    <servlet-name>servletName</servlet-name>
    <servlet-class>ServletClass</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>servletName</servlet-name>
    <url-pattern>url</url-pattern>
</servlet-mapping>

1、标注在方法上
作为请求处理方法在程序接收到对应的URL请求时被调用:

package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
...
@Controller
public class FirstController{
    @RequestMapping(value="/firstController")
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) {
                           ...
        return mav;
    }
}

此时,可以通过地址:http://localhost:8080/chapter12/firstController访问该方法!
2、标注在类上
该类中的所有方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下。

package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
...
@Controller
@RequestMapping(value="/hello")
public class FirstController{
    @RequestMapping(value="/firstController")
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) {
                           ...
        return mav;
    }
}

由于在类上添加了@RequestMapping注解,并且其value属性值为“/hello”,所以上述代码方法的请求路径将变为:http://localhost:8080/chapter12/hello/firstController


@RequestMapping注解除了可以指定value属性外,还可以指定其他一些属性,如下表所示。
这里写图片描述
表中所有属性都是可选的,但其默认属性是value。当value是其唯一属性时,可以省略属性名。下面两种标注的含义相同:
@RequestMapping(value=”/firstController”)
@RequestMapping(“/firstController”)

以上参数的详细教程


1.RequestMapping最基础的用法就是实现类或者方法的访问控制
例如下面案例就是方法上面的控制:

    @RequestMapping(value = "testlogin.do",method = RequestMethod.POST)
    public String testLogin(){
        return "redirect:login";
    }
    <form id="loginTestForm" action="testlogin.do" method="post">
        <input type="submit" value="submit">
    </form>

从代码上面就可以很明显的看出来,在表单中提交action地址,通过SpringMVC框架会自动找到value值等于action地址的方法然后就会执行这个方法。

这里需要注意的是form表单中提交的方式要和方法里面的method一直,否则就会报错。上面的例子中两个都是post方法提交的。
2.RequestMapping带参数的情况:

   @RequestMapping(value = "testlogin.do",method = RequestMethod.POST)
    public String testLogin(@RequestParam("departmentId") String departmentId){
        System.out.println("输入的参数为:"+departmentId);
        return "redirect:login";
    }

第一种表单形式:

<form id="loginTestForm" action="testlogin.do" method="post">
    <input type="text" name="departmentId" id="departmentId"></br>
    <input type="submit" value="submit">
</form>

第二中表单形式:

form id="loginTestForm" action="testlogin.do?departmentId=123" method="post">
    <input type="submit" value="submit">
</form>

以上两种的结果是一样的,都可以执行方法中内容。其中@RequestParam还有其他的写法,我这里就不多介绍了,有兴趣的可以自己去了解一下。
3.RequestMapping中获取URL中的参数信息:

<form id="loginTestForm" action="testlogin.do/adc" method="post">
    <input type="submit" value="submit">
</form>

通过{变量名称}这样的写法,就可以在@PathVariable(“变量名”) 实现参数的调用了。

当然也可以绑定多个参数,例如:

    @RequestMapping(value = "testlogin.do/departmentId/{departmentId}/departmentName/{departmentName}",method = RequestMethod.POST)
    public String testLogin(@PathVariable("departmentId") String departmentId,@PathVariable("departmentName") String departmentName){
        System.out.println("输入的URL参数为1:"+departmentId);
    System.out.println("输入的URL参数为2:"+departmentName);
        return "redirect:login";
    }

猜你喜欢

转载自blog.csdn.net/weixin_39190897/article/details/81744052