@RequestParam
前面讲了可以用占位符的方式传递参数,但那不是真正意义上的请求参数!在这里我们使用@RequestParam来获得参数!
代码操作:
在index.jsp中添加代码
<!--使用@RequestParam注解获取请求参数-->
<a href="/testRequestParam?userName=root&password=123">test requestParam</a>
然后添加控制器方法
@RequestMapping(value = "/testRequestParam")
public String testRequestParams(@RequestParam(value = "userName") String userName, @RequestParam(value = "password") String password) {
System.out.println("userName is " + userName + " password is " + password);
return "success";
}
运行后点击超链接
如果我们在url中少写某个参数的话就会出错,我们可以通过添加
@RequestParam(value = "userName", required = false)
来设置某个参数是不必要的,此时没有赋值的参数会被赋予null默认值。
这里就能想到,对于int float这类无法被赋予null的基本类型参数我们该怎么办呢?
当然是给其设置默认值:
@RequestParam(value = "userName", required = false,defaultValue = "0") int id
这样就行了!
@RequestHeader
我们先添加一个打开网页的请求和控制器方法:
<!--使用@RequestHerder注解获取请求头部参数-->
<a href="/testRequestHeader">test RequestHeader</a>
@RequestMapping(value = "/testRequestHeader")
public String testRequestHeader(){
return "success";
}
点击testRequestHeader
按F12打开次网页的开发者模式,点击network,f5刷新,点击第一个选择header,这里我们选择Accept-Language(记住是request header的参数)参数来测试!
@RequestMapping(value = "/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept-Language") String contentLanguage){
System.out.println("Content Language is " + contentLanguage);
return "success";
}
然后重启服务器,点击超链接:
成功获取头部参数!
@CookieValue
CookieValue的注解时差不多的,就懒得演示了!
使用POJO作为参数进行传递
POJO:Plain Ordinary Java Object 即简单的java对象!
前面讲了的都是传递些基本类型对象作为参数值的,这里我们开始讲解如何使用SpringMVC传递类对象!
当然前面的传递基本类型参数然后再在控制器方法中进行封装的方式也可以实现对象的传递,可是这样就太过于笨拙,如果一个类有很多个属性的话我们就要传很多个参数了!
在SpringMVC中会按请求参数名和POJO属性名自动匹配,自动危改对象填充属性值,支持级联属性!比如一个类里面有一个或多个其他类的对象属性!
接下来看代码实操:
首先新建两个javabean:
package cn.jxufe.bean;
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 + '\'' +
'}';
}
}
package cn.jxufe.bean;
public class User {
private String name;
private int age;
private String phone;
private Address address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phone='" + phone + '\'' +
", address=" + address +
'}';
}
}
然后index.jsp添加表单:
<form action="/testPOJO">
姓名 <input type="text" name="name"/><br>
年龄 <input type="text" name="age"/><br>
电话 <input type="text" name="phone"/><br>
省份 <input type="text" name="address.province"/><br>
城市 <input type="text" name="address.city"/><br>
</form>
控制器方法:
@RequestMapping(value = "/testPOJO")
public String testPOJO(User user) {
System.out.println("user information is " + user);
return "success";
}
运行:
点击提交
对象参数获取成功!