概述
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值必须是声明的基本类型,否则将报错
@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绑定
最后
以上就是眯眯眼电话为你收集整理的SpringMvc数据的绑定的全部内容,希望文章能够帮你解决SpringMvc数据的绑定所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复