SpringMVC获取请求参数
获取基本数据类型
SpringMVC在获取基本数据类型时,会根据参数名进行自动注入(参数名和请求参数名一致)
获取POJO类型
SpringMVC在获取POJO类型时,会根据属性名进行自动注入(POJO的属性名和请求参数名一致),支持级联赋值
获取数组类型
也是参数名和请求参数一致就能够自动注入
@RequestMapping("/getParams3")
@ResponseBody
public void getParams3(String[] strs){
System.out.println(Arrays.asList(strs));
}
请求URL:http://localhost:8080/getParams3/?strs=str1&strs=str2&strs=str3
获取集合类型
第一种获取集合的方式:封装成一个VO对象
@RequestMapping("/getParams4")
@ResponseBody
public void getParams4(VO vo){
System.out.println(vo);
return "success";
}
<form action="${pageContext.request.contextPath}/user/getParams4" method="post">
<input type="text" name="userList[0].username">
<input type="text" name="userList[0].age">
<input type="text" name="userList[1].username">
<input type="text" name="userList[1].age">
<input type="submit" value="提交">
</form>
VO对象
public class VO {
private List<User> userList;
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "VO{" +
"userList=" + userList +
'}';
}
}
第二种获取集合的方式:ajax请求
1.编写获取请求的方法(在参数前面加上@RequestBody注解)
@RequestMapping("/getParams5")
@ResponseBody
public void getParams5(@RequestBody List<User> userList){
System.out.println(userList);
}
2.编写ajax.jsp通过ajax请求资源
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js"></script>
</head>
<body>
<script>
let userList = new Array();
userList.push({username: "张三", age: 18});
userList.push({username: "李四", age: 28});
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/user/getParams5",
data: JSON.stringify(userList), //传递Json数据
contentType: "application/json;charset=utf-8"
});
</script>
</body>
</html>
3.要开放静态资源的访问,否则就访问不到jQuery文件
因为我们配置了内部资源视图解析器,如果不开放静态资源访问,那么SpringMVC在搜索资源时也会加上前缀和后缀
静态资源访问要配合注解驱动来使用,配置了静态资源访问就要配置注解驱动
<!--手动开启某一目录的静态资源访问-->
<!--<mvc:resources mapping="/js/**" location="/js/"/>-->
<!--开放静态资源的访问-->
<mvc:default-servlet-handler/>
解决post请求乱码问题
在web.xml中配置
<!--配置全局过滤器,解决post请求乱码问题,配置在最前面-->
<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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
获取Restful风格的参数
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
彻底理解webservice SOAP WSDL(Restful风格取代了WebServices)
理解本真的 REST 架构风格
深入浅出 REST
//localhost/user/getParams6/张三
@RequestMapping(value = "/getParams6/{username}", method = RequestMethod.GET)
@ResponseBody
public void getParams6(@PathVariable(value = "username", required = true) String username){
System.out.println(username);
}