1.基础知识介绍
@RequestBody:
主要用来接收前端发送的json字符串的数据,而此类数据一般在请求体中,所以要使用该注解时,大多数情况下要用post请求。前端发送HTTP请求(包含请求体参数),该注解会将json字符串装配到目标类(加入@RequestBody的类),装配方式是根据json字符串的key来对应目标类的属性,若对应成功且key对应的value符合类中属性的类型要求,则调用setter方法来给对应属性赋值。
json的格式:
单个对象:{"key":"value","key":"value"……}
集合: [{"key":"value","key":"value"……}
{"key":"value","key":"value"……}
{"key":"value","key":"value"……}]
与@RequestParam区别:
- @RequestBody接收的是请求体中的参数,@RequestParam接收的是key-value中的参数。
- 前端发送的参数在请求体中,必须用@RequestBody来接收,若参数不在请求体中,后端可以直接接收,也可以通过@RequestParam来指定接收参数的key。
- @在一次请求中,@RequestBody只可以使用一次,而@RequestParam可以多次使用。
2.@RequestBody测试代码
实体类Student:
public class Student {
private int id;//编号
private String name;//姓名
private String nickname;//昵称
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
'}';
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
StuController:
import com.lpx.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
public class StuController {
@RequestMapping("/obj")
public String doSome_Object(@RequestBody Student student){
return student.toString();
}
@RequestMapping("/str")
public String doSome_String(@RequestBody String stuStr){
return stuStr;
}
}
首先测试使用Student类来接收前端参数(使用Apipost)
发送请求:
注:要在Body中加入json请求参数
测试使用String来接收请求参数
发送请求:
两个注解:
@JsonAlias("value")
加在实体类属性上方,在发送json参数时对应该属性的key可以为value,该注解依赖于setter/getter。以下图为例,在json数据转化为对象时,key为id或key为ID都可以赋给Student对象的id属性。
@JsonProperty("value")
加在实体类属性上方,不依赖于setter/getter,以下图为例,加上这个注解后,json数据中的key必须为Name才可被识别并转化为Student的name属性。