目录
我们要在springmvc中获取请求参数以及servlet原生的api十分的简单,只需要在方法参数的地方写上即可,需要什么写什么。包含源代码的debug,十分硬核。
想要获取什么参数,只需要在方法上写上参数名称即可,名称需要相同。当请求到达时,如果有该参数,那么就会进行自动注入,并且进行类型转换。如果没有该参数,那么就是null。注意:null是不能转化成基本数据类型的,如果没有传该参数,那么就会报错
- @RequestMapping("/f1")
- public ModelAndView f1(String name) {
- System.out.println(name);
- return null;
- }
上面的获取参数,需要参数名和请求参数的名称一致。而我们使用@RequestParam就可以指定要获取的参数名称。先看看@RequestParameter的源码

我们通过注释,可以知道,通过该设置注解的value或name值来进行参数绑定,不指定默认就是参数名称。还有一个required来设置是否必须有该参数,默认是true,可以设置为false,那么不含该参数就是null。还有一个defaultValue,通过注释就知道是用来给参数默认值的,设置该参数,required就会变成false,当请求不包含指定参数时,就会使用该默认值。
- @RequestMapping("/f2")
- public ModelAndView f2(@RequestParam(name = "username", required = false) String name,
- @RequestParam(defaultValue = "-1") int id) {
- System.out.println("name:"+name);
- System.out.println("id:"+id);
- return null;
- }
上面的代码就指定了name的值为请求参数username的值,如果没有该请求参数,那么就是null。而id的值就是请求参数id的值,并且转换为int,如果请求不含id参数,默认就是-1
获取请求同信息使用的是@RequestHeader注解,还是先来看下源码

和@RequestParam基本一模一样,使用方式也一样的,我们通过value或者name指定要获取的请求头名称。
一些常见的请求头
下面的代码用于获取请求的用户信息和请求地址
- @RequestMapping("/f3")
- public ModelAndView f3(@RequestHeader("Host") String ip,
- @RequestHeader("User-Agent") String userAgent){
- System.out.println("Host:"+ip);
- System.out.println("User-Agent:"+userAgent);
- return null;
- }
注意:@RequestHeader不区分大小写,而@RequestParam区分大小写
java是面向对象的,我们在获取数据时,也希望能够是以对象形式的。当然,springmvc支持这个功能,会进行自动封装,根据成员属性名称来进行匹配请求参数
创建一个bean
- public class People {
- private Integer id;
- private String name;
- private String age;
-
- public People() {
- }
-
- public People(Integer id, String name, String age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getAge() {
- return age;
- }
-
- public void setAge(String age) {
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "People{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", age='" + age + '\'' +
- '}';
- }
- }
想要自动封装,直接将该对象写到方法参数列表即可
- @RequestMapping("/f4")
- public ModelAndView f4(People people) {
- System.out.println(people);
- return null;
- }
people属性值将按照参数名称来进行匹配,没有就是null,注意:对象属性可以也是对象,支持嵌套赋值,下面是执行具体步骤的源码






这个很简单了,需要上面直接写在参数列表即可
- @RequestMapping("/f5")
- public ModelAndView f5(HttpServletRequest request, HttpServletResponse response,
- HttpSession session) {
- System.out.println("request:" + request);
- System.out.println("response:" + response);
- System.out.println("session:" + session);
- return null;
- }
下面直接看源码,可以非常清晰的看见支持哪些参数




可以发现包含了request,response,session等等
我们可以通过springmvc非常方便的获取参数,底层就是通过反射来进行的,springmvc获取到参数,然后进行匹配,在反射调用方法的时候将参数进行传入