原文: https://javatutorial.net/requestbody-annotation-in-spring
@RequestBody注解可用于处理 Web 请求。

更具体地说,它用于将方法参数与请求的主体绑定,其工作方式是HttpMessageConverter根据请求内容的类型转换请求的主体。
语法
<modifier> <return-type> <method-name> (@RequestBody <type> <name>) {}
以上语法的示例:
public String congratulateEmployee(@RequestBody Employee emp) {}
包含上述方法的完整Controller类:
@RestControllerpublic class CongratulationsController {@PostMapping("/congratulations")public Manager assignToManager(@RequestBody Employee emp) {String name = emp.getName();int yearsWorked = emp.getYearsWorked();String message = "Congratulations, " + name + "! You have been working here for " + yearsWorked + ".";Manager manager = new Manager();manager.setEmployee(emp.getName()); // now this employee has been assigned to this managerreturn manager;}}
我们的Employee类如下所示:
public class Employee {private String name;private int yearsWorked;public String getName() {return name;}public int getYearsWorked() {return yearsWorked;}}
我们的Manager类如下所示:
public class Manager {private String employee;public void setEmployee(String name) {employee = name;}public String getEmployee() {return employee;}}
分解
就像我上面说的,我们收到的 JSON 格式反序列化为 Java 类型。
当我们说@RequestBody Employee emp时,我们将Employee类型的方法参数与 Web 请求的主体绑定在一起。RequestBody到达如下:
{"name": "John Doe","yearsWorked": "3"}
再次感谢HttpMessageConverter方法,我们可以将该RequestBody JSON 响应转换为Employee对象,该对象包含公共方法getName()和getYearsWorked()。 这就是为什么我们可以在RequestBody参数上调用这些方法的原因:
String name = emp.getName();int yearsWorked = emp.getYearsWorked();
作为该方法的结果,我们返回了类型为Manager的数据,由于HttpMessageConverter,我们已将返回类型转换为以下响应格式:
{"employee": "the name of the employee that was contained in the @RequestBody"}
附带一提,RequestBody注释与RestController注释一样,主要用于 REST API。
