Spring MVC Controller接收多种类型的数据
Spring MVC 接收多种类型的数据,及多种传参方式。
日期时间转换
form
表单提交的日期时间数据是字符串,在Controller
层如果直接用Date
类型接收是会报错的,需要将String
类型的日期时间转换为Date
类型。
SpringMVC提供了一种非常方便的转换方式,在springmvc.xml
文件配置了注解驱动,就默认启用了转换器。
注解驱动:<mvc:annotation-driven />
转换器:FormattingConversionServiceFactoryBean
@DateTimeFormat
该注解是对传入的字符串类型的日期时间参数或包含日期时间类型属性的Json 对象进行格式化为Date
类型。
- 如果Controller方法里使用的是日期类型参数接收,则给每个Date类型参数前面加上
@DateTimeFormat()
注解。 - 如果Controller方法里使用的是对象接收Json 对象,则给实体类日期类型的属性上加上
@DateTimeFormat()
注解。 - 如果Controller方法里使用的是对象接收Json 字符串,方法里的对象参数前面加了
@RequestBody
注解,则给实体类日期类型的属性只能使用@JsonFormat()
注解。
@JsonFormat
@ResponseBody输出的日期时间是个长整型,JSP可以在页面端进行格式化,也可以在先在后台格式化后发送。@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
该注解是对传出的Date
类型参数格式化成指定格式的字符串。
1 | //Controller 方法 |
示例代码
- 实体类:
user,QueryVo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import java.io.Serializable;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
public class User implements Serializable {
private static final long serialVersionUID = 3538997579072069352L;
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
//set/get方法
........
}1
2
3
4
5
6
7
8
9
10
11
12import java.util.List;
public class QueryVo
{
//接收User对象参数
private User user;
//封装集合类型参数
private List<User> uList;
//set/get方法
........ Controller
代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.springmvc.entity.QueryVo;
import com.ssm.springmvc.entity.User;
public class ReceiveReqParam {
/**
* 需求:页面跳转,跳转到form表单页面
*/
public String showForm() {
return "tform";
}
/**
* springmvc如何接受参数:
* 1、struts2基于属性封装
* 2、springmvc,默认是单例的,基于方法进行封装
* springmvc需要何种参数,只需往方法添加即可,方法执行完毕,参数内存即释放。
* 需求:接受基本类型参数:string,int,long等等
* 参数:int
* 返回值:success
* 映射器注解:可带也可不带扩展名,与方法名不一定要相同,通常这样便于直观理解
*/
public String recieveInt(Model model, Integer id) {
System.out.println("接收参数:" + id);
// 参数回显
model.addAttribute("id", id);
return "success";
}
/**
* 需求:接受String类型参数
* model: 封装参数
* 乱码解决: get请求配置Servlet容器
* <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol
* ="HTTP/1.1" redirectPort="8443"/>
* post:spring编码过滤器,在web.xml处理编码过滤器
*
*/
public String recieveStr(Model model, String username, String id) {
model.addAttribute("username", username);
model.addAttribute("id", id);
return "success";
}
/**
* 接收日期类型数据
* @param model
* @param username
* @param id
* @return
*/
public String dateType( Date birthday, Model model){
model.addAttribute("birthday", birthday);
return "success";
}
/**
* 需求:接受数组参数
*/
public String recieveStr(String[] hobes) {
for (String hobe : hobes) {
System.out.println(hobe);
}
// System.out.println("数组参数:"+hobes[0]+"-----"+hobes[1]);
return "success";
}
/**
* 封装对象类型数据
* form表单提交的日期是字符串类型,jackson默认是没有做日期转换的。
* SpringMVC整合fastJson,开启日期转换
*/
public String recieveUser(User user, Model model) {
System.out.println(user);
model.addAttribute("user", user);
return "success";
}
/**
* 接受包装类型数据
*/
public String recieveVo(QueryVo vo, Model model) {
model.addAttribute("user", vo.getUser());
return "success";
}
/**
* 接收集合类型数据
*/
public String recieveList(Model model, QueryVo vo) {
model.addAttribute("user", vo.getuList().get(1));
return "success";
}
}- form表单页面和回显页面:
tform.jsp
提交各种数据类型的form
表单页面。表单提交回显示面:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>封装基本类型参数:int</h3>
<form action="${pageContext.request.contextPath}/recieveInt" method="post">
编号:<input name="id" type="text" id="id">
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装String类型参数:String</h3>
<form action="${pageContext.request.contextPath}/recieveStr" method="post">
编号:<input name="id" type="text" id="id">
姓名:<input name="username" type="text" id="username">
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装Date类型参数:Date</h3>
<form action="${pageContext.request.contextPath}/dateType" method="post">
生日:<input name="birthday" type="text" id="birthday">
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装数组类型参数:String[] ids</h3>
<form action="${pageContext.request.contextPath}/recieveArray" method="post">
<!-- 数组常用在复选框,多选框 -->
<input name="hobes" type="checkbox" value="1">旅游
<input name="hobes" type="checkbox" value="2">音乐
<input name="hobes" type="checkbox" value="3">运动
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装对象参数:User</h3>
<form action="${pageContext.request.contextPath}/recieveUser" method="post">
编号:<input name="id" type="text" id="id">
姓名:<input name="username" type="text" id="username">
生日:<input name="birthday" type="text" id="birthday">
性别: <input name="sex" type="radio" value="男">男 <input name="sex" type="radio" value="女">女
地址:<input name="address" type="text" id="address">
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装包装类参数:QueryVo</h3>
<form action="${pageContext.request.contextPath}/recieveVo" method="post">
编号:<input name="user.id" type="text" id="id">
姓名:<input name="user.username" type="text" id="username">
生日:<input name="user.birthday" type="text" id="birthday">
性别:<input name="user.sex" type="radio" value="男">男 <input name="user.sex" type="radio" value="女">女
地址:<input name="user.address" type="text" id="address">
<input type="submit" value="提交表单">
</form>
<hr color="blue">
<h3>封装集合类参数:List</h3>
<form action="${pageContext.request.contextPath}/recieveList" method="post">
编号:<input name="uList[0].id" type="text" id="id">
姓名:<input name="uList[0].username" type="text" id="username">
生日:<input name="uList[0].birthday" type="text" id="birthday">
性别:<input name="uList[0].sex" type="radio" value="男">男 <input name="uList[0].sex" type="radio" value="女">女
地址:<input name="uList[0].address" type="text" id="address">
<br>
编号:<input name="uList[1].id" type="text" id="id">
姓名:<input name="uList[1].username" type="text" id="username">
生日:<input name="uList[1].birthday" type="text" id="birthday">
性别:<input name="uList[1].sex" type="radio" value="男">男 <input name="uList[1].sex" type="radio" value="女">女
地址: <input name="uList[1].address" type="text" id="address">
<input type="submit" value="提交表单">
</form>
</body>
</html>success.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>回显int类型:${id}</h3>
<hr color="blue">
<h3>回显String类型,编号:${id} 姓名:${username }</h3>
<hr color="blue">
<h3>回显Date类型: <fmt:formatDate value="${birthday}" pattern="yyyy-MM-dd" /></h3>
<hr color="blue">
<h3>回显数组类型:</h3>
<hr color="blue">
<h3>编号:${user.id}</h3>
<h3>用户名:${user.username}</h3>
<h3>生日: <fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd HH:mm:ss" /></h3>
<h3>性别:${user.sex}</h3>
<h3>地址:${user.address}</h3>
</body>
</html>
Spring MVC Controller接收多种类型的数据
http://blog.gxitsky.com/2018/01/23/SpringMVC-20-receiveReqParamType/