我是靠谱客的博主 眯眯眼电话,最近开发中收集的这篇文章主要介绍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绑定





最后

以上就是眯眯眼电话为你收集整理的SpringMvc数据的绑定的全部内容,希望文章能够帮你解决SpringMvc数据的绑定所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部