今天通过Spring MVC接收参数,搞了好久就是对不上,在经过一番瞎折腾后(太菜了,只好瞎折腾),总算对上了,总结一下
一、数据类型为username=user&password=123456类型的,如GET,“Content-Type=application/x-www-form-urlencoded”的POST类型等
这个接收比较简单,在spring MVC中传入参数名称和表单中传入参数的名称对上即可或者通过@RequestParam("")进性匹配就可以,下面举几个例子
1.简单类型
(1)前台传参名称和后台传参完全匹配
ajax调用(默认是GET方式调用),此处相当于localhost/user/login?loginName=user&password=123456(直接访问可以获取返回值)
server对应的接口
(2)前台传参名称和后台传参名称不匹配
后端通过@RequestParam("param")方式进行匹配
2.复杂参数
(1)接收对象
前台传入的参数名称依旧和后台接收参数的名称对上即可
此处前台传入的loginName和password自动匹配到user.loginName和user.password
(2)接收数组,此处踩了不少坑,
首先我尝试着在ajax中直接传个数组试试
emmm,没接收到
查看网页传过去的参数(这个乱码什么玩意)。。。
格式化一下(点下view parsed),看样子那个乱码对应的是“[”和“]”这两玩意的某个编码。。。就是这么传后端接收不了
算了按照网上的教程,写个具体表单传值试试。。。
这回总算接收成功了,然后看一下前端传的参数
(3)接收集合,有不少坑,数据很容易丢
首先你需要一个封装一个数据类型,此处使用UserVO
public class UserVO {
public List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
然后直接上表单
此出写法注意,需要users[0].userId,必须这种写法,不然后端接收依旧有问题
传过去的数据
后端成功接收(由于后端nickName和前端的nickname不匹配,没成功接收(捂脸))
稍微总结一下
①get和“Content-Type=application/x-www-form-urlencoded”的POST类型本质是将数据转换成key=value类型附在url后传递数据,可以通过chrome的调试模式(F12->network->对应的网络访问)查看传过去的数据
后端接收需要key和参数名对上才可以绑定数据
②数组的参数需要ids=1&ids=2&ids=3这种形式的数据,然后绑定带Integer[] ids上。
③集合参数绑定感觉比较坑,容易漏掉些东西,建议还是用JSON交互吧。。
④如果经常接收不到参数,建议用chrome的调试模式(F12->network->对应的网络访问)查看前端传了个什么数据过来。。。
⑤如果前端传入参数过于复杂,可以用@RequestParam Map<String, Object>来接收所有参数遍历,但对于数组和集合不适用(会被顶掉)
PS:@RequestParam不能丢,否则接收的就不是前端传过来的参数
二、Json数据接收
有空再更。。。
三、Restful接收
有空再更。。。