在传统的javaweb中我们获取数据是通过
HttpServletRequest
中的getParameter
或者getHeader
等方法来获取相关的信息。由此我们引出了以下问题:
在SpringMVC中应该如何获取请求提交的数据呢?
在SpringMVC中又应该如何获取请求头信息呢?
在SpringMVC中又应该如何获取客户端提交的Cookie数据呢?
接下来我们将逐一解释上面的三个问题。我们使用idea进行开发。在进行解释之前我们需要准备一个`Register.html`的页面。方便进行表单的提交。`Register.html`代码如下:
问题1 如何获取请求提交的数据?
1.1使用Servlet原生api获取
//方式一采用原生请求方式
@PostMapping(value = "/register")
public String register(HttpServletRequest req){
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println("username: "+username+" send a request");
return "success";
}
如果 System.out.println("username: "+username+" send a request");
语句输出成功,并且浏览器跳转到success.html
页面即为测试成功。
测试结果:
页面跳转:
控制台输出:
1.2采用RequestMapping的Param参数
1.2.1基本使用:
//采用params参数
@PostMapping(value = "/register")
public String register(
@RequestParam("username")
String Username,
@RequestParam("password")
String password){
System.out.println("Username: "+Username+" Password: "+password);
return "success";
}
##### 测试结果:
1.2.2 添加require属性
在注解中添加required
属性并且设置为true
表示请求必须携带该参数,否则无法使用
//采用params参数
@PostMapping(value = "/register")
public String register(
@RequestParam(value = "username" ,required = false)
String Username,
@RequestParam("password")
String password,
@RequestParam("sex",required = true)
String sex){
System.out.println("Username: "+Username+" Password: "+password);
return "success";
}
1.2.3 defaultValue属性
defaultValue属性用来设置形参的默认值,当没有提供对应的请求参数
或者请求参数的值是空字符串""
的时候,方法的形参会采用默认值。
@PostMapping(value = "/register")
public String register(
@RequestParam(value = "username" ,required = false)
String Username,
@RequestParam("password")
String password,
@RequestParam("sex")
String sex,
@RequestParam(value = "hobby" ,required = false ,defaultValue = "未知")
String hobby){
System.out.println("Username: "+Username+" Password: "+password);
return "success";
}
1.3 依靠控制器方法上的形参名来接收
@RequestParam 这个注解是可以省略的,如果方法形参的名字和提交数据时的name相同,则 @RequestParam 可以省略。
但有一个前提:如果你采用的是Spring6+版本,你需要在pom.xml文件中指定编译参数'-parameter',配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<source>21</source>
<target>21</target>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
注意:如果你使用的是Spring5的版本,以上的配置是不需要的。
Controller中的方法只需要这样写:形参的名字必须和提交的数据的name一致!!!!!
@PostMapping(value="/register")
public String register(String username, String password, String sex, ){
System.out.println(username + "," + password + "," + sex );
return "success";
}
1.4 POJO类/JavaBean接收请求参数(重要)
在我之前的《SpringMVC框架和Servlet开发有啥子区别?》一文中我提到了 SpringMVC架构相对于传统原生的Servlet多了一个使用POJO类/JavaBean接收请求参数。为我们开发提供极大的简便。
当提交的数据非常多时,方法的形参个数会非常多,这不是很好的设计。在SpringMVC中也可以使用POJO类/JavaBean来接收请求参数。不过有一个非常重要的要求:POJO类的属性名
必须和请求参数的参数名
保持一致。SpringMvC底层会使用反射机制创建对象并且调用对象的set方法给User对象的属性赋值。提供以下的JavaBean:
ublic class User {
private Long id;
private String username;
private String password;
private String sex;
private String[] hobby;
private String intro;
public User() {
}
public User(Long id, String username, String password, String sex, String[] hobby, String intro) {
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.hobby = hobby;
this.intro = intro;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", hobby=" + Arrays.toString(hobby) +
", intro='" + intro + '\'' +
'}';
}
}
问题二:在SpringMVC中又应该如何获取请求头信息呢?
通过RequestHeader注解可以拿到请求头信息。请求头信息的形式也是key:value
的键值对形式。该注解的作用是:将请求头信息
映射到方法的形参上
。和RequestParam注解功能相似,RequestParam注解的作用:将请求参数
映射到方法的形参
上。当然,对于RequestHeader注解来说,也有三个属性:value、required、defaultValue,和RequestParam一样。
@PostMapping("/register")
public String register(User user,
@RequestHeader(value="Referer", required = false, defaultValue = "")
String referer){
System.out.println(user);
System.out.println(referer);
return "success";
}
问题三:在SpringMVC中又应该如何获取客户端提交的Cookie数据呢?
我们可以通过CookieValue注解来获取Cookie信息。该注解的作用:将请求提交的Cookie数据
映射到方法形参
上。该注解同样是有三个属性:value、required、defaultValue。
前端代码:
<script type="text/javascript">
function sendCookie(){
document.cookie = "id=123456789; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";
document.location = "/springmvc/register";
}
</script>
<button onclick="sendCookie()">向服务器端发送Cookie</button>
后端接收代码
@GetMapping("/register")
public String register(User user,
@RequestHeader(value="Referer", required = false, defaultValue = "")
String referer,
@CookieValue(value="id", required = false, defaultValue = "2222222222")
String id){
System.out.println(user);
System.out.println(referer);
System.out.println(id);
return "success";
}
标签:username,String,SpringMVC,register,sex,获取,password,数据,public
From: https://www.cnblogs.com/bobospace/p/18278101