欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

程序员文章站 2022-06-16 08:58:06
...

该篇博客主要细说@RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

该篇博客主要阐述

1、@RequestMapping简述
2、@RequestMapping注解方法
3、@RequestMapping注解一个控制器类
4、@RequestMapping属性——method
5、@RequestMapping使用Ant风格的URL
6、@RequestMapping属性——params
7、@RequestParam注解(类似于params)
8、@PathVariable注解(使用路径变量)

一、@RequestMapping简述

当我们需要在控制类的内部为每一个动作开发相应的处理方法。要让Spring知道用哪一种方法来处理它的动作,需要使用import org.springframework.web.bind.annotation.RequestMapping注释类型映射的URI与方法

1、RequestMapping注解的作用:映射一个请求和一种方法。可以使用@RequestMapping注解一种方法或类
2、一个采用@RequestMapping注解的方法将成为一个请求处理方法,并由调度程序在接收到对应的URL请求时调用

二、@RequestMapping注解方法

package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author LinJie E-mail:aaa@qq.com
* @version 创建时间:2018年5月14日 下午4:35:59
* RequestMapping注解方法的控制器
*/
@Controller
public class RequestMappingTest {
    //此时映射到该方法上的URL:http://Springmvc_RequestMapping/test
    //当只有一个属性时可以忽略value
    @RequestMapping(value="/test")
    public String test() {
        System.out.println("test");
        return "hello";
    }
}

可以使用如下URL访问test方法

http://localhost:8080/Springmvc_RequestMapping/test

三、@RequestMapping注解一个控制器类

package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author LinJie E-mail:aaa@qq.com
* @version 创建时间:2018年5月14日 下午4:35:59
* RequestMapping修饰类的控制器
*/
@Controller
@RequestMapping(value="/springmvc")
public class RequestMappingTest {
    //此时映射到该方法上的URL:http://Springmvc_RequestMapping/springmvc/test
    //当只有一个属性时可以忽略value
    @RequestMapping(value="/test")
    public String test() {
        System.out.println("test");
        return "hello";
    }
}

可以使用如下URL访问test方法

http://localhost:8080/Springmvc_RequestMapping/springmvc/test

四、@RequestMapping属性——method

method属性用来指示该方法仅处理哪些HTTP方法

仅处理POST和PUT方法时
package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
* @author LinJie E-mail:aaa@qq.com
* @version 创建时间:2018年5月14日 下午4:35:59
* RequestMapping属性含method的控制器
*/
@Controller
@RequestMapping(value="/springmvc")
public class RequestMappingTest {   
    //method属性指示该方法仅处理哪些Http请求
    //处理多个Http请求:method={RequestMethod.POST,RequestMethod.PUT}
    @RequestMapping(value="/test2",method= {RequestMethod.POST,RequestMethod.PUT})
    public String test2() {
        System.out.println("test2");
        return "hello";
    }       
}

请求表单

<form action="springmvc/test2" method="POST">
    <input type="text" name="test">
    <input type="submit" value="submit">
</form>

结果正常

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

如果请求表单是GET请求

<form action="springmvc/test2" method="GET">
    <input type="text" name="test">
    <input type="submit" value="submit">
</form>

报405错误

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

若method属性只有一个HTTP方法值,则无需花括号

method=RequestMethod.POST

五、@RequestMapping使用Ant风格的URL

  • ?:匹配文件名中的一个字符
  • *:匹配文件名中的任意字符
  • **:匹配多层路径

    package linjie.springmvc.handler;

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;

    /**

    • @author LinJie E-mail:aaa@qq.com
    • @version 创建时间:2018年5月14日 下午4:35:59
    • RequestMapping使用Ant风格的URL的控制器
      */
      @Controller
      @RequestMapping(value=”/springmvc”)
      public class RequestMappingTest {
      //Ant风格URL
      //?:匹配文件名中的一个字符
      //*:匹配文件名中的任意字符
      //**:匹配多层路径
      //@RequestMapping(value=”/*/test3”)
      //@RequestMapping(value=”/**/test3”)
      @RequestMapping(value=”/*/test3”)
      public String test3() {
      System.out.println(“test3”);
      return “hello”;
      }
      }

    可以使用如下URL访问test3方法

localhost:8080/Springmvc_RequestMapping/springmvc/pppaaaoooqqq/test3

结果正常

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解


六、@RequestMapping属性——params

给页面设置传递参数

package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author LinJie E-mail:aaa@qq.com
* @version 创建时间:2018年5月14日 下午4:35:59
* RequestMapping属性params的控制器
*/
@Controller
@RequestMapping(value="/springmvc")
public class RequestMappingTest {   
    //@RequestParam属性——params
    @RequestMapping(value="/testparams" , params="user")
    public String testparams(String user) {
        System.out.println("user :"+user);
        return "hello";
    }   
}

如果页面访问:

http://localhost:8080/Springmvc_RequestMapping/springmvc/testparams

404报错
SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

必须要传递一个user参数

http://localhost:8080/Springmvc_RequestMapping/springmvc/testparams?user=linjie

显示正常

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解


七、@RequestParam(类似于params)

映射请求参数

把需要的参数注解到方法的参数上去

  • value:请求参数的参数名
  • required:该参数是否是必须的,默认为true
  • defaultValue:请求参数的默认值

    package linjie.springmvc.handler;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    /**
    * @author LinJie E-mail:aaa@qq.com
    * @version 创建时间:2018年5月14日 下午4:35:59
    * @RequestParam
    */
    @Controller
    @RequestMapping(value="/springmvc")
    public class RequestMappingTest {
        //@RequestParam
        //与@RequestParam属性——params类似
        //映射请求参数
        //value:请求参数的参数名
        //required:该参数是否是必须的,默认为true
        //defaultValue:请求参数的默认值
        //SpringMVC获取请求参数的优势:在Servlet中获取请求参数值相对麻烦:String user = HttpServletRequest.getParameter("user");
        @RequestMapping(value="/test4")
        public String test4(@RequestParam(value="user" , required=false , defaultValue="linjie") String user) {
            System.out.println("user:"+user);
            return "hello";
        }   
    }
    
1、传递请求参数
http://localhost:8080/Springmvc_RequestMapping/springmvc/test4?user=XLJ

显示正常,user传递成功

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

2、不传递请求参数
http://localhost:8080/Springmvc_RequestMapping/springmvc/test4

显示正常,user没有传递,使用默认值linjie

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解


八、@PathVariable使用路径变量

package linjie.springmvc.handler;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author LinJie E-mail:aaa@qq.com
* @version 创建时间:2018年5月14日 下午4:35:59
* @PathVariable使用路径变量
*/
@Controller
@RequestMapping(value="/springmvc")
public class RequestMappingTest {
    //@PathVariable
    //使用路径变量
    //注意:使用路径变量,首先需要在RequestMapping注解的值属性中添加一个变量,该变量必须放在花括号之间
    //然后,在方法签名 中添加同名变量,并加上@PathVariable注解.当该方法被调用时,请求URL的id值将被复制到路径变量中,并可以在方法中使用
    @RequestMapping(value="test5/{id}")
    public String test5(@PathVariable int id) {
        System.out.println("id :"+id);
        return "hello";
    }
}
浏览器输入如下URL
http://localhost:8080/Springmvc_RequestMapping/springmvc/test5/2222

访问正常

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

1、注意:@RequestMapping(value=”test5/{id}”)变量路径必须放在花括号之间
2、可以在请求映射中使用多个路径变量,例如id和name两个路径变量
@RequestMapping(value="test5/{name}/{id}")
public String test5(@PathVariable String name,@PathVariable int id) {
    System.out.println("name :"+name+" ,id :"+id);
    return "hello";
}
浏览器输入如下
http://localhost:8080/Springmvc_RequestMapping/springmvc/test5/linjielinjielinjie/0000001

访问正常

SpringMVC @RequestMapping注解(重点)、@RequestParam注解、@PathVariable注解

工程下载


参考

《Spring MVC学习指南》