SpringMvc数据的绑定

1、基本类型数据绑定

在controller中写一个int参数绑定的方法,

@RequestMapping("/int")
@ResponseBody
public  String getInt(int id){
    return ""+id;
}

发送请求:http://localhost:8080/int?3

响应:此时会报500错误,接收不到名为id的参数

发送请求:http://localhost:8080/int?id=3

响应:3

结论:用基本类型进行参数绑定时,就必须传入key值,且value值必须是声明的基本类型,否则将报错



2、包装类型参数绑定(推荐使用)

@RequestMapping("/integer")
@ResponseBody
public  String getInt(Integer id){
    return ""+id;
}

请求:http://localhost:8080/integer?3 

           http://localhost:8080/integer 

           http://localhost:8080/integer?id=

上面的三个请求响应都是:null


请求:http://localhost:8080/integer?id=3

响应:3

结论:包装类型绑定参数时,key的值可以不传,数据也可以为空,但是要想绑定成功绑定,传的key值要和里面绑定的参数名一致

如果想要必须传入某个参数进行绑定,可以用@RequestParam,用了这个只有所需绑定的参数必须传入,否则报错


3、数组元素绑定

@RequestMapping("/array")
@ResponseBody
public String[] getUser(String[] name){
    return  name;
}
请求:http://localhost:8080/user?name=xiaoshu&name=xiaozhang
响应:
["xiaoshu","xiaozhang"]


4、多层级对象的绑定

在user类中加入一个admin的对象属性

@RequestMapping("/user")
@ResponseBody
public User getUser(User user){
    return user;
}

请求:http://localhost:8080/user?name=xiaoshu&id=1&address=hangzhou&admin.name=xiaoli

响应{"id":1,"name":"xiaoshu","address":"hangzhou","admin":{"name":"xiaoli","address":null}}
结论:将参数绑定到对象内层对象的属性中,如这里例子中的加上admin .name



5、同属性对象参数绑定

这里有两个对象user和admin,它们有两个相同的属性name和address

public String list(User user, Admin admin) {
return user.toString()+""+admin.toString();
}

发送请求:http://localhost:8080/list?name=xiaoshu&address=home
得到:User{id=null, name='xiaoshu', address='home'}Admin{name='xiaoshu', address='home'}

发现属性被同时绑定到了两个对象上
我们可以通过在controller中配置一个@InitBinder进行分开绑定

@InitBinder("user")
public void initUser(WebDataBinder binder){
    binder.setFieldDefaultPrefix("user.");
}
@InitBinder("admin")
public void  initAdmin(WebDataBinder binder){
    binder.setFieldMarkerPrefix("admin.");

}

此时发送请求:http://localhost:8080/list?user.name=xiaoshu&user.address=home
得到:User{id=null, name='xiaoshu', address='home'}Admin{name='null', address='null'}
可以看到带user.前缀的参数只绑定到了user对象中

那如果试一下没有配置@InitBinder时用user.和admin.作为前缀进行请求发送
请求:http://localhost:8080/list?user.name=xiaoshu&user.address=home&admin.name=xiaozhang&admin.address=hangzhou
响应:User{id=null, name='null', address='null'}Admin{name='null', address='null'}
发现都是为空,参数未能成功绑定

结论:进行同属性参数绑定时,要区分绑定时需在属性前加上对象前缀,并在controller中配置@InitBinder来明确哪个前缀的属性绑定到哪个对象中
     没有配置@InitBinder加前缀不能成功绑定
6、List绑定
@RequestMapping("/list")
@ResponseBody
public AdminList getUser(AdminList adminList){
    return  adminList;
}
请求:http://localhost:8080/list?admins[0].name=xiaoshu&admins[1].name=xiaozhang
响应:
{"admins":[{"name":"xiaoshu","address":null},{"name":"xiaozhang","address":null}]}
结论:这里不能直接用List去绑定,而是要创建一个类类中创建一个List去绑定,AdminList中创建了一个ArrayList。

7、Map绑定

@RequestMapping("/map")
@ResponseBody
public AdminMap getMap(AdminMap adminMap){
    return  adminMap;
}
AdminMap中维护了一个Hashmap

请求:http://localhost:8080/map?admins['X'].name=xiaoshu&admins['Y'].name=xiaozhang
响应:
{"admins":{"Y":{"name":"xiaozhang","address":null},"X":{"name":"xiaoshu","address":null}}}

结论:map存放可以保证key的唯一性,过滤冲重复数据

8、Set绑定





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值