一.获取请求参数
客户端获取参数格式: name=xx&age=xxx
服务端获取参数:有时候需要进行封装,而spring mvc 可以接收的参数为
1.基本数据类型
2.pojo类型参数
3.数组类型参数
4.集合类型参数
二.获取参数案例
2.1 获取基本参数
1.controller代码
/**
* @author controller中业务方法的参数名要和请求参数的名称一致,参数值灰自动映射匹配
* @description
* @date 2021/1/10 22:09
* @param
* * @return void
*/
@RequestMapping("/bike")
@ResponseBody
public String bike(String name,int age){
System.out.println("获取的参数name:"+name+" age:"+age);
String result=name+">>"+age;
return result;
}
2.页面访问
2.2 获取pojo的参数
注意:jQuery中,$.ajax()默认发送的参数类型及编码为:application/x-www-form-urlcoded
,而@RequestBody
处理的参数类型及编码为:aplication/json;
在前端提交的数据类型:contentType设置为aplication/json;则controller的通过javabean的属性,则无法获取参数的值。
1.controllerdiam
/**
* @author liujianfu
* @description controller中业务方法的pojo参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike2")
@ResponseBody
public String bike2(User user){
System.out.println("获取的参数name:"+user.getUserName()+" age:"+user.getAge());
String result=user.getUserName()+">>"+user.getAge();
return result;
}
2.userbean:
package com.ljf.spring.mvc.demo.bean;
/**
* @ClassName: User
* @Description: TODO
* @Author: liujianfu
* @Date: 2021/01/10 17:26:08
* @Version: V1.0
**/
public class User {
private String userName;
private int age;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.页面访问
2.3 获取数组的参数
1.controller
/**
* @author liujianfu
* @description controller中业务方法的pojo参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike3")
@ResponseBody
public String bike3(String [] strArray){
System.out.println("获取的参数name:"+strArray[0]+" age:"+strArray[1]);
String result=strArray[0]+">>"+strArray[1];
return result;
}
2.页面访问
2.4 获取结合的参数
1.controller
@RequestMapping("/bike4")
public String bike4(){
return "bike";
}
/**
* @author liujianfu
* @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike5")
@ResponseBody
public String bike5(Vo v){
System.out.println("v:"+v);
List<User> userList= v.getUserList();
for(User u:userList){
System.out.println("user:"+u.getUserName());
}
return "ok";
}
2.vobean
package com.ljf.spring.mvc.demo.bean;
import java.util.List;
/**
* @ClassName: Vo
* @Description: TODO
* @Author: liujianfu
* @Date: 2021/01/10 22:55:01
* @Version: V1.0
**/
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 +
'}';
}
}
3.jsp页面
<%--
Created by IntelliJ IDEA.
User: jurfl
Date: 2021/1/10
Time: 22:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/bike5" method="post">
<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="submit" value="提交">
</form>
</body>
</html>
4.页面访问
2.5 使用@RequestBody获取ajax的json串
当使用ajax时,可以指定contentType为json时,那么方法参数位置使用@RequestBody 可以直接接收集合数据而无需要 使用pojo进行包装。
1.controller层
/**
* @author liujianfu
* @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike6")
public String bike6(){
System.out.println("controller6:");
return "ajax";
}
/**
* @author liujianfu
* @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike7")
@ResponseBody
public String bike7(@RequestBody List<User> userList){
for(User u:userList){
System.out.println("user:"+u.getUserName());
}
return "ok";
}
2.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script>
var userList=new Array();
userList.push({userName:"beijing",age:34});
userList.push({userName:"shanghai",age:89});
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/bike7",
data:JSON.stringify(userList),
contentType:"application/json;charset=utf-8",
success:function(result){
alert(result);
}
})
</script>
</head>
<body>
</body>
</html>
3.配置静态资源的释放器
在spring-mvc.xml文件中配置
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="/images/**" location="/images/"></mvc:resources>
<mvc:resources mapping="/css/**" location="/css/"></mvc:resources>
4.启动服务进行访问
可以看到,控制台打印输出controller层中输出的ajax页面提交的json数据
2.6 使用@RequestParam 注解获取参数
参数绑定注解@requestParam
* value :与请求参数名称
* required: 此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
* defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。
1.controller层代码
/**
* @author liujianfu
* @description 参数绑定注解@requestParam
* value :与请求参数名称
* required: 此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
* defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike8")
@ResponseBody
public String bike8(@RequestParam(value="name",required = false,defaultValue = "ljf") String username){
System.out.println("username:"+username);
return "ok";
}
2.重启服务,访问
2.7 使用Restful的风格获取参数
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,用户客户端月服务端交互,更加简洁,易于实现缓存机制。
Restful风格的请求是使用“url+请求方式”,表示一次请求目的,http的4个表示方式:
1get :获取资源 如 /user/1 GET: 得到id=1的user
2.post: 新建资源 如 /user/ 新增user
3.put :用户更新资源 如: /user/1 更新id=1 的user
4.delete :用于删除资源 如: /user/1 删除id=1的user
在springMvc中可以使用站位符,进行参数绑定,地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值,在业务方法中可以使用@PathVariable注解进行占位符的匹配获取工作。
1.controller代码
/**
* @author liujianfu
* @description 参数绑定注解@requestParam
* value :与请求参数名称
* required: 此在制定的请求参数是否必须包括,默认true,提交参数如果没有则报错
* defaultvalue 当没有制定请求参数时,则使用制定的默认值赋值。
* 参数属性名与请求参数名称一致,参数值会自动映射匹配
* @date 2021/1/10 22:14
* @param
* @return
*/
@RequestMapping("/bike9/{pname}")
@ResponseBody
public String bike9(@PathVariable(value="pname",required = false) String username){
System.out.println("username:"+username);
return "ok";
}
2.页面访问
2.8 使用原始HttpservletReuest,reponse,session对象获取参数
1.controller
/**
* @param
* @return
*/
@RequestMapping("/bike11")
@ResponseBody
public String bike11(HttpServletRequest request, HttpServletResponse response, HttpSession session){
System.out.println("request:"+request);
System.out.println("reponse:"+response);
System.out.println("session:"+session);
String s=request+" "+response+" "+session;
return s;
}
2.页面访问