1.获得基本类型参数
@RequestMapping(value = "/save10")
@ResponseBody //告知SpringMVC 不进行视图跳转 直接进行数据回写
public void save10(String userName,int age) throws JsonProcessingException
{
System.out.println(userName);
System.out.println(age);
}
2.获得POJO类型参数
@RequestMapping(value="/save10",params = {"userName","age"})
@ResponseBody
public void save10(User user)
{
System.out.println(user);
}
SpringMVC会自动调用setUserName,setAge为save10方法的参数实例化一个user对象,
user类:
package entity;
public class User
{
private String userName;
private int age;
public void setUserName(String userName)
{
this.userName = userName;
}
public void setAge(int age)
{
this.age = age;
}
public User(String userName, int age) {
this.userName = userName;
this.age = age;
}
public User() {
}
public String getUserName() {
return userName;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", age=" + age +
'}';
}
}
2.获得数组类型参数
@RequestMapping(value="/save11")
@ResponseBody
public void save11(String[] args)
{
System.out.println(Arrays.asList(args));//数组打印是一个地址,list打印是值
}
3.获得集合类型参数
客户端给一个List,元素是user对象的集合传参
private List<User> userList;
@RequestMapping(value = "/save12")
@ResponseBody
public void save12 (VO vo)
{
System.out.println(vo);
}
需要先封装成一个类(VO)
public class VO
{
private List<User> userList;
public void setUserList(List<User> userList)
{
this.userList = userList;
}
@Override
public String toString()
{
return "VO{" +
"userList=" + userList +
'}';
}
public List<User> getUserList()
{
return userList;
}
}
然后使用form表单提交数据给后台
<form action="/user/save12" method="post" accept-charset="UTF-8">
<%--表明是第一个user对象的userName、age--%>
<input type="text" name="userList[0].userName"><br>
<input type="text" name="userList[0].age"><br>
<input type="text" name="userList[1].userName"><br>
<input type="text" name="userList[1].age"><br>
<input type="text" name="userList[2].userName"><br>
<input type="text" name="userList[2].age"><br>
<input type="submit" value="提交">
</form>
需要在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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
需要User类只有无参构造函数,springMVC是通过set方法注入数据,再通过无参构造函数创建User对象。
后台输出:
1.在js文件引入jquery
2.需要让spring-mvc添加jquery文件的映射地址
<mvc:resources mapping="/js/**" location="/js/"/>
如果需要访问webapp下的img文件的静态资源,需要添加
<mvc:resources mapping="/img/**" location="/img/"></mvc:resources>
3.在web-app新建ajax.jsp文件,发送ajax请求
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
<script>
var userList = new Array();
userList.push({userName:"zhangsan",age:18});
userList.push({userName:"lisi",age:20});
$.ajax({
type:"POST",
url:"/user/save13",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8",
})
</script>
</head>
4.后台收到请求,输出userList ,@RequestBody代表将请求体的内容直接注解到userList中,
ajax需要将contenType设置成application/json格式
@RequestMapping(value = "/save13")
@ResponseBody
public void save13 (@RequestBody List<User> userList)
{
System.out.println(userList);
}
或者springMVC匹配不到该静态资源时,可以设置tomcat访问该静态资源
<mvc:default-servlet-handler></mvc:default-servlet-handler>