Spring MVC各种参数进行封装

目录

一、简单数据类型

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.hqwc.cn/news/123.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux:docker-compose下载后无法使用

参考&#xff1a; Ubuntu 安装 Docker & Docker-Compose - 知乎 解决方法: PC上下载二进制文件&#xff0c;之后filezilla上传到服务器对应目录

【跑实验05】利用CLIP中的图像编码器,如何遍历文件夹中的图像,将图像文件改为28*28的尺寸,然后输出到excel中的每一列,最后一列全都标记为0

文章目录 一、初步实现二、警告信息的解决三、Excel的限制四、尝试解决 一、初步实现 要遍历文件夹中的图像并将其尺寸调整为28x28&#xff0c;并将结果输出到Excel中&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保您已经安装了Pandas库&#xff0c…

【MySQL 数据库】7、SQL 优化

目录 一、插入数据优化(1) insert 语句① 批量插入数据② 手动控制事务③ 主键顺序插入&#xff0c;性能要高于乱序插入 (2) load 大批量插入数据【☆❀ 二、主键优化(1) 数据组织形式(2) 页分裂(3) 页合并(4) 主键设计原则 三、orber by 优化四、group by 优化五、limit 优化&…

CSDN个性化推荐系统-负反馈测试

文章目录 前言一、uc不感兴趣标签过滤测试1.uc不感兴趣标签获取(uc_unlike_tag_list)1.1个人中心界面1.2从标签中可以发现什么&#xff1f;1.3与研发确认点1.4设计开发1.5接口获取结果 2.推荐流文章标签获取(tag_list)2.1部分代码2.2基本标签校验2.3基本标签校验结果 3.推荐流u…

Midjourney推出5.2版本,更新zoom out功能

Midjourney是一款专业的图像处理软件&#xff0c;它可以让用户轻松地创造出高质量的图像。它最近宣布推出了5.2版本&#xff0c;这是一个重大的更新&#xff0c;其中最亮眼的功能就是zoom out功能。 zoom out功能可以让用户无限地缩小原始图像&#xff0c;同时保持图像的清晰度…

centos 安装 nginx

1.下载nginx安装包 wget -c https://nginx.org/download/nginx-1.24.0.tar.gz 下载到了当前目录下 2.解压安装包 解压后的结果 3.安装依赖 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel 4. ./configure --prefix/usr/lo…

【TCP/IP】多播 - 定义、原理及编程实现 (TTL、多播组、多播消息)

目录 多播 多播的原理 多播的数据传输时的特点 TTL 的概念 TTL 和 多播组的配置方法 多播的编程与实现 发送者 接收者 多播 多播是一种介于单播和广播通信之间的技术方式&#xff0c;可以将发送者所需要发送的数据包分别发送给分散在不同子网中的一组接收者。 多播的原…

Pytorch数据类型Tensor张量操作(操作比较全)

文章目录 Pytorch数据类型Tensor张量操作一.创建张量的方式1.创建无初始化张量2.创建随机张量3.创建初值为指定数值的张量4.从数据创建张量5.生成等差数列张量 二.改变张量形状三.索引四.维度变换1.维度增加unsqueeze2.维度扩展expand3.维度减少squeeze4.维度扩展repeat 五.维度…

8.6 socket套接字及TCP的实现框架

socket套接字 目录 socket套接字 体系结构的两种形式 几种常见的网络编程接口 socket套接字 socket常用API介绍 socket套接字 三元组【IP地址&#xff0c;端口&#xff0c;协议】 地址族结构体 套接字类型 TCP通信的实现过程 体系结构的两种形式 网络的体系结构 (N…

Vue3:计算属性、监听器

computed 计算属性 计算属性是指 基于现有状态派生 (演变) 出新的状态&#xff0c;现有状态发生变化&#xff0c;派生状态重新计算。 computed 接收回调函数作为参数&#xff0c;基于回调函数中使用的响应式数据进行计算属性的创建&#xff0c;回调函数的返回值就是基于现有状态…

C/C++内存管理

Lesson5–C/C内存管理 【本节目标】 1.C/C内存分布 2.C语言中动态内存管理方式 3.C中动态内存管理方式 4.operator new与operator delete函数 5.new和delete的实现原理 6.定位new表达式 7.常见面试题 C/C内存分布 先看一段C语言代码和相关问题 int globalVar 1; static in…

Spring Boot 如何使用 Log4j2 进行日志记录

Spring Boot 如何使用 Log4j2 进行日志记录 在开发 Java 应用程序时&#xff0c;日志记录是非常重要的一环。Spring Boot 提供了多种日志输出方式&#xff0c;其中 Log4j2 是一种比较常用的日志框架。本文将介绍如何在 Spring Boot 应用程序中使用 Log4j2 进行日志记录。 为什…