通过控制器方法的形参获取请求参数
在使用SpringMVC框架后,在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参。而这里在SpringMVC中同样可以通过ServletAPI获取,而这种原生的方式用到的很少
获取请求参数的方式:
1.通过servletAPI获取(原生方式用的不多)
需要在控制器方法的形参位置设置HttpServletRequest类型的形参,
就可以在控制器方法中使用request对象获取请求参数
2.通过控制器方法的形参获取
只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字一致即可
3.形参中使用到的注解
3.1.@RequestParam:将请求参数和控制器方法的形参绑定
@RequestParam注解的三个属性:value、required、defaultValue
-value:设置和形参绑定的请求参数的名字
-required:来设置是否必须传输value所对应的参数,
默认值为true,表示value所对应的请求参数必须传输,否则页面报错:400 - Required String parameter ‘xxx’ is not present
若设置为false,则表示value所对应的请求参数不是必须传输,若未传输则形参值为null
-defaultValue:设置当没有传输value所对应的请求参数时,为形参设置默认值,此时和required属性值无关
3.2.@RequestHeader:将请求头信息和控制器方法的形参绑定
3.3.@CookieValue:将Cookie数据和控制器方法的形参绑定
-@RequestHeader,@CookieValue用法跟@RequestParam一样都有value、required、defaultValue三个属性
以下时代码的实现:
1.通过servletAPI获取
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<form th:action="@{/param/servletAPI}" method="post">
用户名:<input type="text" name="userName"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录"><br>
</form>
</body>
</html>
package com.qcw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class TestParamController {
@RequestMapping("/param/servletAPI")
public String getParamByServletAPI(HttpServletRequest request){
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username = " + username+",password = " + password);
return "success";
}
}
2.通过控制器方法的形参获取
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<form th:action="@{/param}" method="post">
用户名:<input type="text" name="userName"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录"><br>
</form>
</body>
</html>
package com.qcw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RequestMapping("/param")
public String getParam(@RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
@RequestParam("password") String password,
@RequestHeader("referer") String referer,
@CookieValue("JSESSIONID") String jsessionId
){
System.out.println("jsessionId = " + jsessionId);
System.out.println("referer = " + referer);
System.out.println("username = " + username+",password = " + password);
return "success";
}
}