(3)使用Bean对象进行页面传值到控制器
-
Spring MVC控制器传值到页面
(1)使用Request、Session进行控制器传值到页面(不建议使用)
(2)使用ModelAndView进行控制器传值到页面
(3)使用ModelMap进行控制器传值到页面(建议使用)
请求参数是通过表单/URL?加上后面的参数(key=value)组成的,例如:xxxx:8080?username=aaa&password=111中的username和password就是请求参数。
SpringMVC绑定请求参数:
(1)请求地址提供请求参数:username、password。
(2)控制器中的方法进行参数接收:指定和请求参数同样的名称
(3)当请求参数名和控制器指定名称不一致时将无法取得参数
(4)可以在控制器的参数中通过@ReqeustParam指定URL传递参数名称
/**
* @Author: Ly
* @Date: 2020-09-22 17:14
*/
@Controller
@RequestMapping("/param")
public class ParamController {
/**
* 请求参数
* @return
*/
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("执行了...");
System.out.println("用户名是:"+username);
System.out.println("密码是:"+password);
return "success";
}
}
传送不同类型的的数据:
- 基本类型参数:包括基本类型和 String 类型
@RequestMapping("/testParam")
public String testParam(String username,String password){
System.out.println("执行了...");
System.out.println("用户名是:"+username);
System.out.println("密码是:"+password);
return "success";
}
-
POJO 类型参数:实体类
在jsp页面中添加一个表单,并创建对应的实体类Account(name与参数名称一致)
<form action="param/saveAccount" method="post">
姓名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
金额:<input type="text" name="money"><br/>
<input type="submit" value="提交">
</form>
- 请求参数绑定,把数据封装到Javabean的类中
/**
* @return
*/
@RequestMapping("/saveAccount")
public String saveAccount(Account account){
System.out.println("执行了...");
System.out.println(account);
return "success";
}
-
POJO 类型参数:实体类+关联实体类
在jsp页面中添加一个表单,新建一个User类,属性包括name和age,并在Account类中添加User类对象
<form action="param/saveAccount" method="post">
姓名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
金额:<input type="text" name="money"><br/>
用户姓名:<input type="text" name="user.name"><br/>
用户年龄:<input type="text" name="user.age"><br/>
<input type="submit" value="提交">
</form>
-
数组和集合类型参数:包括 List 结构和 Map 结构的集合(包括数组)
在jsp页面中添加一个表单,删除Account类中User对象属性,并定义一个
List<User> list;
集合对象属性和一个Map<String,User> map;
集合对象属性。
<%--把数据封装Account类中,类中存在list和map集合--%>
<form action="param/saveAccount" method="post">
姓名:<input type="text" name="username"><br/>
密码:<input type="text" name="password"><br/>
金额:<input type="text" name="money"><br/>
用户姓名:<input type="text" name="list[0].name"><br/>
用户年龄:<input type="text" name="list[0].age"><br/>
用户姓名:<input type="text" name="map['one'].name"><br/>
用户年龄:<input type="text" name="map['one'].age"><br/>
<input type="submit" value="提交">
</form>
SpringMVC 绑定请求参数是自动实现的,但是必须按照相关格式,如果绑定基本类型或者 String 类型,要求我们的参数名称必须和控制器中方法的形参名称保持一致(严格区分大小写)。如果是 POJO 类型,或者它的关联对象:要求表单中参数名称和 POJO 类的属性名称保持一致,并且控制器方法的参数类型是 POJO 类型。如果是集合类型,可以将集合类型的请求参数放在 POJO 中,在表单中请求参数名称要和 POJO 中集合属性名称相同,还可以接收的请求参数是 json 格式数据,并通过相关注解实现。
如果遇特殊类型转换要求,需要我们自己编写自定义类型转换器
案例:日期类类型的数据
日期的格式为2020/10/10,如果我们把格式修改为2020-10-10,SpringMVC在绑定参数时就会报错。
定义日期类
public class DataType implements Serializable{
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "date=" + date;
}
}
在JSP页面中添加表单,并在表单中传输2020-10-10格式的日期数据
<%--自定义类型转换器--%>
<form action="param/saveDate" method="post">
日期:<input type="text" name="date">
<input type="submit" value="提交">
</form>
执行测试代码:
/**
* 自定义类型转换器
* @param dateType
* @return
*/
@RequestMapping("/deleteDate")
public String deleteDate(DateType date){
System.out.println("执行了...");
System.out.println(date);
return "success";
}
上边代码执行过后会发现报错,因为SpringMVC不能解析这个数据,这时需要我们自定义类型转换器:
- 第一步:定义一个类,实现 Converter 接口
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
//判断
if(source==null){
throw new RuntimeException("请您传入数据");
}
DateFormat df=new SimpleDateFormat("yyy-MM-dd");
try{
//把字符串转换为日期
return df.parse(source);
}catch (Exception e){
throw new RuntimeException("数据类型转换出现错误");
}
}
}
- 第二步:在 spring 配置文件中配置类型转换器,spring 配置类型转换器的机制是,将自定义的转换器注册到类型转换服务中去。
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<!--类型转换器的路径-->
<bean class="com.ly.utils.StringToDateConverter"></bean>
</set>
</property>
</bean>
- 第三步:在 annotation-driven 标签中引用配置的类型转换服务
给大家分享下我的复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
- 第三部分:性能调优(JVM+MySQL+Tomcat)
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
oU-1630916040266)]
[外链图片转存中…(img-nRlxL6fy-1630916040267)]
[外链图片转存中…(img-RkqZl8VO-1630916040268)]
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
[外链图片转存中…(img-9WtlcZsl-1630916040270)]
[外链图片转存中…(img-9pWfmN0X-1630916040271)]
[外链图片转存中…(img-a4WBLTeI-1630916040272)]
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
[外链图片转存中…(img-mUfzpaKa-1630916040273)]
[外链图片转存中…(img-sLdtFrbN-1630916040274)]