Spring MVC各种参数进行封装

news/2024/11/8 3:02:49/

目录

一、简单数据类型

1.1 控制器方法

1.2 测试结果

二、对象类型

2.1 单个对象

2.1.1 控制器方法

2.1.2 测试结果

2.2 关联对象

2.2.1 控制器方法

2.2.2 测试结果

三、集合类型

3.1 简单数据类型集合

3.1.1 控制方法

3.1.2 测试结果

3.2 对象数据类型集合

3.2.1 控制器方法

3.2.2 测试结果

3.3 Map集合

3.3.1 控制器方法

3.3.2 测试结果 

往期专栏&文章相关导读 

1. Maven系列专栏文章

2. Mybatis系列专栏文章

3. Spring系列专栏文章 

4. Spring MVC系列专栏文章  


一、简单数据类型

在Servlet中我们通过 request.getParameter(name) 获取请求参数。该方式存在两个问题:

  1. 请求参数较多时会出现代码冗余。
  2. 与容器紧耦合

而SpringMVC支持参数注入的方式用于获取请求数据,即将请求参数直接封装到方法的参数当中。用法如下:

1.1 控制器方法

// 获取简单类型参数@RequestMapping("/c1/param1")public void simpleParam(String username,int age){System.out.println(username+" "+age);}

        由于我们没有配置对应的param1页面,这是直接在控制台打印出访问的参数是多少。 访问该方法时,请求参数名和方法参数名相同,即可完成自动封装。并在控制台打印出来。执行路径为:http://localhost:8080/c1/param1?username=LYL&age=19

1.2 测试结果

OK,确实是在控制台成功输出了,说明封装成功,接下来我们讲一下对象类型。 

二、对象类型

SpringMVC支持将参数直接封装为对象,首先我们先新建一个学生类。如下:

Student 

package com.example.domain;public class Student {private int id;private String name;private String sex;public Student() {}public Student(int id, String name, String sex) {this.id = id;this.name = name;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Student[ " +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +" ]";}
}

2.1 单个对象

2.1.1 控制器方法

// 获取对象类型参数@RequestMapping("/c1/param2")public void objParam(Student student){System.out.println(student);}

 可以知道,我们在控制台是会打印出学生的具体信息的,

访问路径:http://localhost:8080/c1/param2?id=1&name=LYL&sex=man

2.1.2 测试结果

        OK,确实是在控制台打印出来了,说明我们对对象类型进行封装的时候,只需要将他们的属性放在访问路径的参数里面即可 

2.2 关联对象

        要实现关联对象的封装,首先我们得先建一个Address地址类,然后在Student类里面新增一个Address类型的属性即可。如下:

Address: 

package com.example.domain;public class Address {// 地址信息private String info;// 邮编private String postcode;public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public String getPostcode() {return postcode;}public void setPostcode(String postcode) {this.postcode = postcode;}@Overridepublic String toString() {return "Address[ " +"info='" + info + '\'' +", postcode='" + postcode + '\'' +" ]";}
}

 记住修改Student类,如下:

package com.example.domain;import java.util.List;
import java.util.Map;public class Student {private int id;private String name;private String sex;// 地址对象//private Address address;public Student() {}public Student(int id, String name, String sex) {this.id = id;this.name = name;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic String toString() {return "Student[ " +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", address='" + address + '\'' +" ]";}
}

2.2.1 控制器方法

    // 获取关联对象类型参数@RequestMapping("c1/param3")public void objParam2(Student student){System.out.println(student);}

        访问该方法时,请求参数名和方法参数的属性名相同,即可完成自动封装。,因此我们可以将请求路径写成:http://localhost:8080/c1/param3?id=1&name=HQX&sex=woman&address.info=guangzhou&address.postcode=5201314

2.2.2 测试结果

OK,可以很明显看到也是可以成功查询出来了。 

三、集合类型

        SpringMVC支持将参数封装为List或Map集合,下面演示一下封装为简单数据类型集合的写法。如下:

3.1 简单数据类型集合

3.1.1 控制方法

// 绑定简单数据类型List参数,参数前必须添加@RequestParam注解@RequestMapping("/c/param4")public void listParam(@RequestParam List<String> users){users.forEach(System.out::println);}

从代码可以看出这是访问之后会在控制台遍历这个集合。

访问路径如下: http://localhost:8080/c/param4?users=LYL&users=HQX

3.1.2 测试结果

 OK,确实成功在控制台打印出来了。

3.2 对象数据类型集合

        SpringMVC不支持将参数封装为对象类型的List集合,但可以封装到有List属性的对象中。在这里我们得先在Student类添加一个集合对象。写法如下:

Student

package com.example.domain;import java.util.List;
import java.util.Map;public class Student {private int id;private String name;private String sex;// 地址集合Listprivate List<Address> address;public Student() {}public Student(int id, String name, String sex) {this.id = id;this.name = name;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public List<Address> getAddress() {return address;}public void setAddress(List<Address> address) {this.address = address;}@Overridepublic String toString() {return "Student[ " +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", address='" + address + '\'' +" ]";}
}

3.2.1 控制器方法

// 对象中包含集合属性@RequestMapping("c1/param6")public void listParam6(Student student){System.out.println(student);}

其实和上面得对象类型没什么不一样,主要是参数类型得属性不一样,访问路径不一样。 

访问路径:http://localhost:8080/c1/param6?id=1&name=LYL&sex=man&address[0].info=HQX&address[0].postcode=520&address[1].info=MVC&address[1].postcode=1314

3.2.2 测试结果

 OK,也是可以成功查询出来的

3.3 Map集合

        同样,SpringMVC要封装Map集合,需要封装到有Map属性的对象中。修改Student实体类,写法如下:

Student

package com.example.domain;import java.util.List;
import java.util.Map;public class Student {private int id;private String name;private String sex;// 地址集合Mapprivate Map<String,Address> address;public Student() {}public Student(int id, String name, String sex) {this.id = id;this.name = name;this.sex = sex;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Map<String, Address> getAddress() {return address;}public void setAddress(Map<String, Address> address) {this.address = address;}@Overridepublic String toString() {return "Student[ " +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", address='" + address + '\'' +" ]";}
}

3.3.1 控制器方法

// 对象中包含Map属性@RequestMapping("c1/param7")public void mapParam(Student student){System.out.println(student);}

访问路径:

http://localhost:8080/c1/param7?id=1&name=LYL&sex=man&address[%27one%27].info=H&address[%27one%27].postcode=520&address[%27two%27].info=QX&address[%27two%27].postcode=1314]

3.3.2 测试结果 

        OK,也是成功查出来了,至于第一条的two的info为什么为空是因为我写少了个']',所以才出现一丢丢小插曲,但是不影响我们继续输出。

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章 

Spring系列专栏Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章  

SpringMVC系列专栏Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

http://www.ppmy.cn/news/479201.html

相关文章

OpenGL视口学习

VC6新建一个openGL类型项目&#xff1b; 出现一些选项&#xff0c;默认后生成一个项目&#xff1b; VC6自带GL支持&#xff1b; 需要添加附加包含路径&#xff1b; 而后构建工程&#xff1b;运行如下&#xff1b; 是一个旋转的立方体&#xff1b; 生成的代码不是MFC的&#xff…

常见配置文件对比

时间&#xff1a;2018-11-30 记录&#xff1a;byzqy 在程序开发中&#xff0c;常被用作配置文件的文件格式有&#xff1a;xml、ini、json、yaml。在此比较学习一下&#xff0c;以便后续选择使用。 标题&#xff1a;yaml,json,ini这三种格式用来做配置文件优缺点 地址&#xff1…

配置文件对比

支持复杂数据结构支持注释支持约束XML支持支持支持 &#xff08;schema&#xff09;JSON支持不支持不支持yaml支持支持不支持properties不支持支持不支持

统一配置中心对比介绍

一、Apollo和Spring Cloud Config配置中心对比 二、apollo相比于spring-cloud-config有什么优势 https://github.com/ctripcorp/apollo/wiki/FAQ#9-apollo%E7%9B%B8%E6%AF%94%E4%BA%8Espring-cloud-config%E6%9C%89%E4%BB%80%E4%B9%88%E4%BC%98%E5%8A%BF

主流配置中心对比

目前市面上用的比较多的配置中心有&#xff1a;Spring Cloud Confifig、Apollo、Nacos和Disconf等。 由于Disconf不再维护&#xff0c;下面主要对比一下Spring Cloud Confifig、Apollo和Nacos。 从配置中心角度来看&#xff0c;性能方面Nacos的读写性能最高&#xff0c;Apollo次…

小米12pro天玑版和小米12pro哪个值得买 两者配置对比

小米12 Pro天玑版首发天玑9000处理器&#xff0c;要比小米12 Pro搭载的骁龙8Gen1性能更强&#xff0c;并且功耗更低。 我用的小米手机就是活动时8折抢购的机会不容错过 http://xiaomi.adiannao.cn 2、拍照 小米12 Pro天玑版虽说是和小米12S一起发布的&#xff0c;但是并没有徕卡…

【计算机网络基础】期中测试

文章目录 在OSI 参考模型中&#xff0c;( B )利用通信子网提供的服务实现两个用户进程之间端到端的通信&#xff0c;在这个层次模型中&#xff0c;如果用户A需要通过网络向用户B传送数据&#xff0c;那么首先将数据送入应用层&#xff0c;在该层给它附加控制信息后送入表示层;在…

对比服务器,进行正确配置

目录 &#xff08;1&#xff09; prosody的服务模块在线情况对比 &#xff08;2&#xff09; docker-compose的情况下&#xff0c;配置是如何进行的 .evn的作用传递 启动脚本在哪 环境变更的传递 (3) 有没有视频 与声音时 &#xff08;4&#xff09;还有六楼听不到声音的…