请求参数的绑定

1.绑定的机制
 
我们都知道,表单中请求参数都是基于 key=value 的。
SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。
例如:
< a href = "account/findAccount?accountId=10" > 查询账户 </ a >
中请求参数是:
accountId=10
/**
* 查询账户
* @return
*/
@RequestMapping ( "/findAccount" )
public String findAccount(Integer accountId ) {
System. out .println( " 查询了账户。。。。 " + accountId );
return "success" ;
}
 
2.支持的数据类型:
 
基本类型参数:
包括基本类型和 String 类型
POJO 类型参数:
包括实体类,以及关联的实体类
数组和集合类型参数:
包括 List 结构和 Map 结构的集合(包括数组)
SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求。
如果是基本类型或者 String 类型:
要求我们的参数名称必须和控制器中方法的形参名称保持一致。 ( 严格区分大小写 )
如果是 POJO 类型,或者它的关联对象:
要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。
如果是集合类型 , 有两种方式:
第一种:
要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。
List 集合中的元素赋值,使用下标。
Map 集合中的元素赋值,使用键值对。
第二种:
接收的请求参数是 json 格式数据。需要借助一个注解实现。
 
使用示例
 
1 基本类型和 String 类型作为参数
jsp 代码:
<!-- 基本类型示例 -->
< a href = "account/findAccount?accountId=10&accountName=zhangsan" > 查询账户 </ a >
控制器代码:
/**
* 查询账户
* @return
*/
@RequestMapping ( "/findAccount" )
public String findAccount(Integer accountId ,String accountName ) {
System. out .println( " 查询了账户。。。。 " + accountId + "," + accountName );
return "success" ;
}
 
2 POJO 类型作为参数
实体类代码:
/**
* 账户信息
* @author 黑马程序员
* @Company http://www.ithiema.com
* @Version 1.0
*/
public class Account implements Serializable {
private Integer id ;
private String name ;
private Float money ;
private Address address ;
//getters and setters
}
/**
* 地址的实体类
* @author 黑马程序员
* @Company http://www.ithiema.com
* @Version 1.0
*/
public class Address implements Serializable {
private String provinceName ;
private String cityName ;
//getters and setters
}
jsp 代码:
<!-- pojo 类型演示 -->
< form action = "account/saveAccount" method = "post" >
账户名称: < input type = "text" name = "name" >< br />
账户金额: < input type = "text" name = "money" >< br />
账户省份: < input type = "text" name = "address.provinceName" >< br />
账户城市: < input type = "text" name = "address.cityName" >< br />
< input type = "submit" value = " 保存 " >
</ form >
控制器代码:
/**
* 保存账户
* @param account
* @return
*/
@RequestMapping ( "/saveAccount" )
public String saveAccount(Account account ) {
System. out .println( " 保存了账户。。。。 " + account );
return "success" ;
}
 
3 POJO 类中包含集合类型参数
实体类代码:
/**
* 用户实体类
* @author 黑马程序员
* @Company http://www.ithiema.com
* @Version 1.0
*/
public class User implements Serializable {
private String username ;
private String password ;
private Integer age ;
private List<Account> accounts ;
private Map<String,Account> accountMap ;
//getters and setters
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age="
+ age + ",\n accounts=" + accounts
+ ",\n accountMap=" + accountMap + "]" ;
}
}
jsp 代码:
<!-- POJO 类包含集合类型演示 -->
< form action = "account/updateAccount" method = "post" >
用户名称: < input type = "text" name = "username" >< br />
用户密码: < input type = "password" name = "password" >< br />
用户年龄: < input type = "text" name = "age" >< br />
账户 1 名称: < input type = "text" name = "accounts[0].name" >< br />
账户 1 金额: < input type = "text" name = "accounts[0].money" >< br />
账户 2 名称: < input type = "text" name = "accounts[1].name" >< br />
账户 2 金额: < input type = "text" name = "accounts[1].money" >< br />
账户 3 名称: < input type = "text" name = "accountMap['one'].name" >< br />
账户 3 金额: < input type = "text" name = "accountMap['one'].money" >< br />
账户 4 名称: < input type = "text" name = "accountMap['two'].name" >< br />
账户 4 金额: < input type = "text" name = "accountMap['two'].money" >< br />
< input type = "submit" value = " 保存 " >
</ form >
控制器代码:
/**
* 更新账户
* @return
*/
@RequestMapping ( "/updateAccount" )
public String updateAccount(User user ) {
System. out .println( " 更新了账户。。。。 " + user );
return "success" ;
}
 
4 请求参数乱码问题
post 请求方式:
web.xml 中配置一个过滤器
<!-- 配置 springMVC 编码过滤器 -->
< filter >
< filter-name > CharacterEncodingFilter </ filter-name >
< filter-class >
org.springframework.web.filter.CharacterEncodingFilter
</ filter-class >
 
<!-- 设置过滤器中的属性值 -->
< init-param >
< param-name > encoding </ param-name >
< param-value > UTF-8 </ param-value >
</ init-param >
<!-- 启动过滤器 -->
< init-param >
< param-name > forceEncoding </ param-name >
< param-value > true </ param-value >
</ init-param >
</ filter >
<!-- 过滤所有请求 -->
< filter-mapping >
< filter-name > CharacterEncodingFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
springmvc 的配置文件中可以配置,静态资源不过滤:
<!-- location 表示路径, mapping 表示文件, ** 表示该目录下的文件以及子目录的文件 -->
<mvc:resources location = "/css/" mapping = "/css/**" />
<mvc:resources location = "/images/" mapping = "/images/**" />
<mvc:resources location = "/scripts/" mapping = "/javascript/**" />
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值