SpringMVC请求参数的绑定
1.参数绑定
1.1 绑定的机制
表单中请求参数都是key=value的,SpringMVC绑定请求参数的过程是通过把表单请求参数,作为控制器中方法参数进行绑定的。
例如:
<a href="account/findAccount?accountId=10">查询账户</a>
中的参数是:accountId=10 控制器所对应的参数为:
@RequestMapping("/findAccount")
public String findAccount(Integer accountId) {
System.out.println("查询了账户。。。。"+accountId);
return "success"; }
1.2 支持的数据类型:
基本数据类型的参数:
包括基本类型和String类型。(注:Spring不属于八大基本类型)
Pojo类 型的参数:
包括实体类,以及关联的实体类
数组和集合类型参数:
包括List结构和Map结构的集合(包括数组)
SpringMVC绑定请求参数时自动实现的,但是要想使用,必须遵循使用要求。
1.3 使用要求
如果是基本类型和String类型:
要求我们的参数名称必须和控制器中方法的形参名称一致。(严格区分大小写)
如果是pojo类型,或者它的关联对象:
要求表单中参数名称和Pojo类的属性名称保持一致。并且控制器方法的参数类型是Pojo类型
如果是集合类型,有两种方式:
第一种:要求集合类型的请求参数必须在Pojo中。在表单中请求参数名称必须要和Pojo中属性名称相同。
给List集合中的元素赋值,使用下标。
给Mpa集合中的元素赋值,使用键值对
第二种:接收的请求参数是json格式数据。需要借助一个注解实现。(@RequestBody)
2.使用示例
2.1 基本类型和String类型作为参数
Jsp代码:
<a href="params/requestMappering?username=张三&title=nihao">请求参数绑定</a>
控制器代码:
/**
* 参数绑定
* @param username
* @param title
* @return
*/
@RequestMapping(value = "/requestMappering")
public String paramsRequest(String username, String title){
System.out.println(username + "========" +title);
return "success";
}
运行结果:
2.2 Pojo类型作为参数
User实体类:
public class User implements Serializable{
private String username;
private Integer age;
private Date birthday;
}
Account实体类:
public class Account implements Serializable {
private String accountname;
private String password;
private Double salary;
private User user;
}
jsp代码:
<form action="/params/account" method="post">
账户名:<input name="accountname" type="text"><br>
密码:<input name="password" type="text"><br>
金额:<input name="salary" type="text"><br>
姓名:<input name="user.username" type="text"><br>
年龄:<input name="user.age" type="text"><br>
<input value="提交" type="submit">
</form>
控制器代码:
/**
* 参数绑定—javabean
* @return
*/
@RequestMapping(value = "/account")
public String findAccount(Account account){
System.out.println(account);
return "success";
}
运行结果:
2.3 Pojo类中包含集合类型参数
实体类代码:
Account实体类:
public class Account implements Serializable {
private String accountname;
private String password;
private Double salary;
// private User user;
private List<User> lists;
private Map<String, User> maps;
}
User实体类:
public class User implements Serializable{
private String username;
private Integer age;
private Date birthday;
}
Jsp代码:
<form action="/params/account" method="post">
账户名:<input name="username" type="text"><br>
密码:<input name="password" type="text"><br>
金额:<input name="salary" type="text"><br>
<%--封装List--%>
姓名:<input name="lists[0].username" type="text"><br>
年龄:<input name="lists[0].age" type="text"><br>
<%--map--%>
姓名:<input name="maps['one'].username" type="text"><br>
年龄:<input name="maps['one'].age" type="text"><br>
<input value="提交" type="submit">
</form>
控制器代码:
/**
* 参数绑定—javabean
* @return
*/
@RequestMapping(value = "/account")
public String findAccount(Account account){
System.out.println(account);
return "success";
}
运行结果:
2.4 自定义类型转换器
自定义date转换器,将字符串转换为日期:
package com.llb.util;
/**
* 自定义类型转换器
* 将字符串转换成日期
* Ceate By llb on 2019/8/13
*/
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String str) {
if(str == null){
throw new RuntimeException("请您传入数据!");
}
DateFormat df ;
try {
if(str.contains("-")){
df = new SimpleDateFormat("yyyy-MM-dd");
}else {
df = new SimpleDateFormat("yyyy/MM/dd");
}
//把字符串转换成日期
return df.parse(str);
} catch (ParseException e) {
throw new RuntimeException("日期类型转换失败!");
}
}
}
springmvc.xml配置:
在 spring 配置文件中配置类型转换器,
在 annotation-driven 标签中引用配置的类型转换服务 。
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.llb.util.StringToDateConverter"/>
</set>
</property>
</bean>
<!--开启springmvc框架的注解支持-->
<mvc:annotation-driven conversion-service="conversionService"/>
jsp代码:
<form action="/params/saveUser" method="post">
姓名:<input name="username" type="text"><br>
年龄:<input name="age" type="text"><br>
生日:<input type="text" name="birthday">
<input value="提交" type="submit">
</form>
控制器代码:
/**
* 自定义格式转换器
* @return
*/
@RequestMapping(value = "/saveUser")
public String saveUser(User user){
System.out.println(user);
return "success";
}
运行结果:
SpringMVC项目搭建
github:https://github.com/PopsiCola/SSM-SpringMVC/tree/springmvc_response