目录
三、请求参数绑定
1、案例
jsp代码
html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>请求参数绑定</title>
</head>
<body>
<h3>请求参数绑定入门</h3>
<form action="/user/save1.do" method="post">
姓名:<input type="text" name="username" /><br/>
年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
<h3>请求参数绑定(封装到实体类)</h3>
<form action="/user/save2.do" method="post">
姓名:<input type="text" name="username" /><br/>
年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
<h3>请求参数绑定(封装到实体类)</h3>
<form action="/user/save3.do" method="post">
姓名:<input type="text" name="username" /><br/>
年龄:<input type="text" name="age" /><br/>
金额:<input type="text" name="address.money" /><br/>
<input type="submit" value="提交" />
</form>
<h3>请求参数绑定(封装到实体类,存在list集合)</h3>
<form action="/user/save4.do" method="post">
姓名:<input type="text" name="username" /><br/>
年龄:<input type="text" name="age" /><br/>
金额:<input type="text" name="address.money" /><br/>
集合:<input type="text" name="list[0].money" /><br/>
集合:<input type="text" name="list[1].money" /><br/>
<input type="submit" value="提交" />
</form>
</body>
</html>
Javabean代码
java
public class User implements Serializable {
private String username;
private Integer age;
// 引用对象
private Address address;
// list集合
private List<Address> list;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public List<Address> getList() {
return list;
}
public void setList(List<Address> list) {
this.list = list;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", age=" + age +
", address=" + address +
", list=" + list +
'}';
}
}
java
public class Address implements Serializable{
// 金额
private Double money;
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Address{" +
"money=" + money +
'}';
}
}
controller代码
java
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 请求参数的绑定
* @return
*/
@RequestMapping("/save1.do")
public String save(String username,Integer age){
System.out.println("姓名:"+username);
System.out.println("年龄:"+age);
return "suc";
}
/**
* 请求参数的绑定
* @return
*/
@RequestMapping("/save2.do")
public String save2(User user){
System.out.println("user对象:"+user);
return "suc";
}
/**
* 请求参数的绑定
* @return
*/
@RequestMapping("/save3.do")
public String save3(User user){
System.out.println("user对象:"+user);
return "suc";
}
/**
* 请求参数的绑定
* @return
*/
@RequestMapping("/save4.do")
public String save4(User user){
System.out.println("user对象:"+user);
return "suc";
}
}
2、解决请求参数中文乱码的解决
在web.xml中配置Spring提供的过滤器类
XML
<!-- 配置过滤器,解决中文乱码的问题 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 指定字符集 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3、自定义类型转换器
有两种方法
第一种方式使用DateTimeFormat注解的方式
java
// 生日
// 2000-11-11 格式的日期不能进行转换了,开发使用还是比较多,比较简单
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
第二种方式,自定义类型转换器。如果想自定义数据类型转换,可以实现Converter的接口
java
public class StringToDate implements Converter<String,Date>{
/**
* 进行类型转换的方法
* @param s 用户输入的内容
* @return
*/
@Override
public Date convert(String s) {
// 判断
if(s == null){
throw new RuntimeException("请输入内容");
}
// 进行转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
// 进行转换
return sdf.parse(s);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
四、常用注解
1、RequestParam注解
- name: 参数的名称。如果请求参数的名称与方法参数名称相同,则可以省略。
- required: 是否必需。默认为 true,必须要传请求参数,不传就会报错。如果为 false,则当参数不存在时,参数值将为 null。
- defaultValue: 默认值。当参数不存在或为空字符串时,可以使用默认值。如果没有传请求参数,使用默认值
2、RequestBody注解
- 作用:用于获取请求体的内容(注意:get方法不可以)
- 属性
- required:是否必须有请求体,默认值是true
- 代码如下
java
/**
* @return
*/
@RequestMapping("/save2.do")
public String save2(@RequestBody String body){
System.out.println("请求体内容:"+body);
return "suc";
}
3、 RequestHeader注解
- 作用:获取指定请求头的值
- 属性
- value:请求头的名称
- 代码如下
java
/**
* RequestHeader 获取请求头的值
* @return
*/
@RequestMapping("/save3.do")
public String save3(@RequestHeader(value = "Accept") String header){
System.out.println("Accept请求头的值:"+header);
return "suc";
}
4、 CookieValue注解
- 作用:用于获取指定cookie的名称的值
- 属性
- value:cookie的名称
- 代码
java
/**
* CookieValue 获取到cookie中的值
* @return
*/
@RequestMapping("/save4.do")
public String save4(@CookieValue(value = "JSESSIONID") String cookie){
System.out.println("值:"+cookie);
return "suc";
}
5、 PathVaribale注解
- 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性
- value:指定url中的占位符名称
- Restful风格的URL
- 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
- restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便