目录
二、 使用 @RequestHeader 绑定请求报头的属性值(了解)
三、使用 @CookieValue 绑定请求中的 Cookie 值
使用 @RequestParam 绑定请求参数值
使用 @RequestHeader 绑定请求报头的属性值(了解)
使用 @CookieValue 绑定请求中的 Cookie 值
使用 POJO 对象绑定请求参数值
一、使用 @RequestParam 绑定请求参数值
在处理方法入参处使用@RequestParam可以把请求参
数传递给请求方法
- value :参数名
- required :是否必须。默认为true,表示请求参数中必须包含对应的参数,若不存在,将抛出异常
在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:
/*
* @RequestParam来映射请求参数。
* value 值即请求参数的参数名
* required 该参数是否必须。默认为 true
* defaultValue 请求参数的默认值
* */
@RequestMapping("springmvc/testRequestParam")
public String testRequestParam(@RequestParam(value = "username") String un,
@RequestParam(value = "age",required = false) Integer age){
System.out.println("testRequestParam,username:"+un+",age:"+age);
return "ok";
}
web/index.jsp页面的<body></body>标签中添加如下代码:
<p><a href="springmvc/testRequestParam?username=hua&age=11">testRequestParam?username=hua&age=11</a></p>
运行tomcat,idea会自动打开主页点,下面链接
如果少了一个age参数,在尾部添加
springmvc/testRequestParam?username=hua会报如下错误:
如果age是非必要的话,可以设置为
@RequestParam(value = "age",required = false) int age){
再重启访问上面的少了一个age的地址一样报错
int类型无法传,要么把age改为Integer类型
@RequestParam(value = "age",required = false) Integer age)
要么你非要用int的话,参数传不过来就会报错,那么我就传一个默认的0,这样就解决了
@RequestParam(value = "age",required = false,defaultValue = "0") int age)
结果为:testRequestParam,username:hua,age:0
二、 使用 @RequestHeader 绑定请求报头的属性值(了解)
请求头包含了若干个属性,服务器可据此获知客户端的信 息,通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:
/*
* 了解:
* 映射请求头信息,用法用@RequestParam
* */
@RequestMapping("springmvc/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept-Language") String a1){
System.out.println("testRequestHeader,Accept-Language:"+a1);
return "ok";
}
web/index.jsp页面的<body></body>标签中添加如下代码:
<p><a href="springmvc/testRequestHeader">Test RequestHeader</a></p>
运行tomcat,idea会自动打开主页点,下面链接
看idea日志控制台,如下:
testRequestHeader,Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
三、使用 @CookieValue 绑定请求中的 Cookie 值
@CookieValue 可• 让处理方法入参绑定某个 Cookie 值
先用火狐浏览器,打开刚才测试的页面,然后再F12调出开发插件,得到一个cookie变量“JSESSIONID”值为“BE97D9EA3E2207FF7251C878CDD323DE”如下图:
在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:
/*
* 了解:
* @CookieValue:映射一个Cookie值。属性同@RequestParam
* */
@RequestMapping("/springmvc/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String seesionId){
System.out.println("testCookieValue:seesionId:"+seesionId);
return "ok";
}
打开web/index.jsp,在其页面的<body></body>标签中添加如下代码:
<p><a href="springmvc/testCookieValue">Test CookieValue</a></p>
运行tomcat,idea会自动打开主页点,下面链接
得到请求的Cookie
再看一下idea最下方的日志控制台,得到cookie,结果是相同的:
四、使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属值。支持级联属性。
如:dept.deptId、dept.address.tel 等
如果你们请求的是一个表单的话,这个表单通常是对应一个类的对象,如果一个个用@RequestMapping()去映射的话那这个成本太高了,太麻烦!这时候我们就可以用一个java对象来请求参数,POJO简单的Java对象,主要是获取请求中的大量参数。
建立 src/main/java/com.hualinux.srpingmvc.entities/Address.java
package com.hualinux.srpingmvc.entities;
public class Address {
private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
'}';
}
}
建立 src/main/java/com.hualinux.srpingmvc.entities/User.java
package com.hualinux.srpingmvc.entities;
public class User {
private String username;
private String password;
private String email;
private int age;
private Address address;
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", age=" + age +
", address=" + address +
'}';
}
}
在src/main/java/com.hualinux.srpingmvc.handers/SpringMVCTest.java,添加如下代码:
/*
* Spring MVC 会按请求参数名和POJO 属性名进行自动匹配。
* 自动为该对象填充属性值。支持级联属性。如dept.deptId、dept.address.tel等
* */
@RequestMapping("/springmvc/testPojo")
public String testPojo(User user){
System.out.println("testPojo:"+user);
return "ok";
}
打开web/index.jsp,在其页面的<body></body>标签中添加如下代码:
<p>
<form action="springmvc/testPojo" method="post">
username:<input type="text" name="username"/><br>
password:<input type="password" name="password"/><br>
email:<input type="text" name="email"/><br>
age:<input type="text" name="age"/><br>
city:<input type="text" name="address.city"><br>
province:<input type="text" name="address.province"><br>
<input type="submit" value="submit"/>
</form>
</p>
运行tomcat,idea会自动打开主页点,下面链接
测试:运行随便输入一行数据,我这里密码是123
看idea正下方日志为:
testPojo:User{username='hua', password='123', email='hualinux@hua.com', age=20, address=Address{province='gz', city='gz'}}