Spring中的RequestBody注释

@ requestbody 注释可用于处理 web 请求。

更具体地说,它用于将方法参数绑定到请求的主体,它的工作方式是 HttpMessageConverter 根据请求内容的类型转换请求的主体。

语法

<modifier> <return-type> <method-name> (@RequestBody <type> <name>) {
}

以上语法的示例:

public String congratulateEmployee(@RequestBody Employee emp) {
}

包含上述方法的完整Controller类:

@RestController
public class CongratulationsController {	
	@PostMapping("/congratulations")
	public Manager assignToManager(@RequestBody Employee emp) {
	   String name = emp.getName();
	   int yearsWorked = emp.getYearsWorked();
	   String message = "恭喜, " + name + "! 你已经在这里工作" + yearsWorked + "年了。";
	   Manager manager = new Manager();
	   manager.setEmployee(emp.getName()); //现在这个员工被分配给这个经理
	   return 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"
}

顺便说一句,与 RestController 注释一样,RequestBody 注释主要用于 REST api。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值