window.open携带请求头_Spring MVC入门(四):请求数据传入

dcc126de6bdfcbf27062a935fbe6bf5a.png

一、请求信息的传入

  • Spring MVC通过分析控制器处理方法的参数签名,将HTTP请求信息(参数、请求头、Cookie值)绑定到处理方法的相应入参中。
  • 必要时可以对方法及方法入参标注相应的注解(@PathVariable@RequestParam@RequestHeader等)。

二、@RequestParam注解

在控制器的处理方法入参处使用 @RequestParam可以把请求参数传递给请求方法。

2.1、@RequestParam注解源码分析

@RequestParam注解源码:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {

   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

   boolean required() default true;

   String defaultValue() default ValueConstants.DEFAULT_NONE;
}

@RequestParam注解可以接受的参数:

  • value —— 参数名。
  • required —— 是否必须。默认为 true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常。
  • defaultValue —— 默认值,当没有传递参数时使用该值。

2.2、@RequestParam注解的示例

控制器的处理方法:

@RequestMapping(value="/testRequestParam")
public String testRequestParam(
        @RequestParam(value="username") String username,
        @RequestParam(value="age", required=false, defaultValue="0") int age){
    System.out.println("testRequestParam - username="+username+",age="+age);
    return "success";
}

客户端请求该URL接口时,必须要携带一个username参数,而age参数不是必须的,它也包含默认值0。

三、@RequestHeader注解

在控制器的处理方法入参处使用@RequestHeader可以把请求头信息传递给请求方法。

3.1、@RequestHeader注解的源码分析

@RequestHeader注解源码:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestHeader {

   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

   boolean required() default true;

   String defaultValue() default ValueConstants.DEFAULT_NONE;
}

@RequestHeader注解能接受的参数和@RequestParam注解相同。

3.2、@RequestHeader注解的示例

控制器的处理方法:

@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader("User-Agent") String userAgent){
    System.out.println("testRequestHeader - User-Agent:"+userAgent);
    return "success";
}

客户端请求这个URL接口时,testRequestHeader方法能够获取客户端的用户代理信息。

四、@CookieValue注解

在控制器的处理方法入参处使用@CookieValue注解可以把Cookie信息传递给请求方法。

4.1、@CookieValue注解的源码分析

@CookieValue注解的源码:

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CookieValue {

   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

   boolean required() default true;

   String defaultValue() default ValueConstants.DEFAULT_NONE;
}

@CookieValue注解能接受的参数和@RequestHeader注解、@RequestParam注解相同。

4.2、@CookieValue注解的示例

控制器的处理方法:

@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
    System.out.println("testCookieValue: sessionId: " + sessionId);
    return "success";
}

客户端请求这个URL接口时,testCookieValue方法能够获取客户端携带的JSESSIONID这个Cookie的信息,如果客户端没有携带,则请求会失败。

五、使用POJO作为参数

Spring MVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值。并且支持级联属性。

5.1、使用POJO作为参数的示例

1)新建一个POJO

public class Student {
    private String name;
    private int age;
    
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 这里省略getter、setter、toString方法
}

2)新建一个控制器的处理方法

@RequestMapping("/testPOJO")
public String testPojo(Student student) {
    System.out.println("testPojo: " + student);
    return "success";
}

3)测试

携带参数name和age请求该URL接口,Spring MVC就会自动将这两个参数注入到testPojo方法的参数Student对象中。

5.2、级联属性的示例

1)新建一个Teacher类,并将上面的Student类进行修改

Teacher.java:

public class Teacher {
    private String name;
    private int age;
    
    public Teacher() {}
    public Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 这里省略getter、setter、toString方法
}

Student.java:

public class Student {
    private String name;
    private int age;
    private Teacher teacher;

    public Student() {}
    public Student(String name, int age, Teacher teacher) {
        this.name = name;
        this.age = age;
        this.teacher = teacher;
    }
    // 这里省略getter、setter、toString方法
}

2)控制器的处理方法

@RequestMapping("/testPOJO")
public String testPojo(Student student) {
    System.out.println("testPojo: " + student);
    return "success";
}

3)测试

携带参数name、age、teacher.name、teacher.age请求该URL接口,Spring MVC就会自动将这四个参数分别注入到testPojo方法的参数Student对象以及Student对象包含的Teacher对象中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值