动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Spring MVC请求数据传入

09-03 17:37 56浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。在使用Spring MVC开发的过程中也会遇到Spring MVC请求数据传入的情况,需要我们进行处理。下面我们来看看具体的流程:

一、请求信息的传入

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

二、@RequestParam注解

@RequestParam注解Spring MVC请求数据传入中也起到了至关重要的作用。在控制器的处理方法入参处使用 @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对象中。

以上就是Spring MVC请求数据传入的整个过程,当然这不是Spring MVC请求数据传入的标准答案,也许还会有更合适更简单的方法,欢迎小伙伴们前来分享。在本站的Spring MVC视频教程中还有其他的方法可以学习,也欢迎小伙伴们提出宝贵的意见!

0人推荐
共同学习,写下你的评论
0条评论
代码小兵1268
程序员代码小兵1268

11篇文章贡献53362字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消