1.@RequestBody用法介绍
1)@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),传递的参数一定是一个字符串;
2)GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交;
3)在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
2.@RequestBody注意事项
1)@RequestBody接收的是请求体里面的数据;而RequestParam接收的是key-value里面的参数如果参数是放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前什么也不写也能接收。
2)后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为),json字符串自动装配到对象中。
3.@RequestBody示例说明(重点)
需要用到的实体类如下:
User实体类: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
53public class User {
/** 姓名 */
private String name;
/** 年龄 */
private Integer age;
/** 性别 */
private String gender;
/** 座右铭 */
private String motto;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMotto() {
return motto;
}
public void setMotto(String motto) {
this.motto = motto;
}
public String toString() {
return age + "岁" + gender + "人[" + name + "]的座右铭居然是: " + motto + "!!!";
}
}
Team实体类: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
74public class Team {
/** id */
private Integer id;
/** 小组名字 */
private String teamName;
/** 所获称号 */
private List<String> honors;
/** 小组成员 */
private List<User> teamMembers;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public List<String> getHonors() {
return honors;
}
public void setHonors(List<String> honors) {
this.honors = honors;
}
public List<User> getTeamMembers() {
return teamMembers;
}
public void setTeamMembers(List<User> teamMembers) {
this.teamMembers = teamMembers;
}
/*
* 重写toString
*
* @see java.lang.Object#toString()
*/
public String toString() {
// 遍历出小组所获荣耀
StringBuffer sbHonors = new StringBuffer("荣耀start----\n");
for (String honor : honors) {
sbHonors.append(honor);
sbHonors.append("\n");
}
sbHonors.append("荣耀end----\n");
// 遍历出小组成员
StringBuffer sbMembers = new StringBuffer("成员start----\n");
for (User user : teamMembers) {
sbMembers.append(user.toString());
sbMembers.append("\n");
}
sbMembers.append("成员end----\n");
return "小组id:" + id + "\n" + "小组名字:" + teamName + "\n" + "小组所获荣誉:"
+ sbHonors + "\n" + "小组成员:" + sbMembers;
}
}
3.1@RequestBody直接以String接收前端传过来的json数据
后端对应的Controller:1
2
3
4
5
6
7
8
9
10
11
12/**
* 直接以String接收前端传过来的json数据
*
* @param jsonString
* @return json格式的字符串
*/
("mytest0")
public String myTestController0(@RequestBody String jsonString) {
System.out.println(jsonString);
return jsonString;
}
使用PostMan测试:
3.2@RequestBody以简单对象接收前端传过来的json数据
1 | /** |
使用PostMan测试:
3.3@RequestBody以复杂对象接收前端传过来的json数据
1 | /** |
使用PostMan测试:
3.4@RequestBody与简单的@RequestParam()同时使用
1 | /** |
使用PostMan测试:
3.5@RequestBody接收请求体中的json数据;不加注解接收URL中的数据并组装为对象
1 | /** |
使用PostMan测试:
3.6@RequestBody与复杂的@RequestParam()同时使用
1 | /** |
使用PostMan测试:
说明:List
3.7无@RequestBody和@RequestParam()注解修饰的复杂类型使用
1 | /** |
使用PostMan测试: