Skip to content

HttpEntity

HttpEntity@RequestBody 的功能基本一致,但它提供了一个容器对象,能够同时暴露请求标头(Headers)请求主体(Body)

使用示例

java
@PostMapping("/accounts")
public void handle(HttpEntity<Account> entity) {
	HttpHeaders headers = entity.getHeaders();
	Account body = entity.getBody();
	// ... 既能拿到业务数据,又能拿到 HTTP 协议层信息
}
kotlin
@PostMapping("/accounts")
fun handle(entity: HttpEntity<Account>) {
	val headers = entity.headers
	val body = entity.body
	// ...
}

补充教学

1. 什么时候用它而不是 @RequestBody?

当你不仅需要 JSON 数据,还需要根据某些自定义 Header 来做决策(例如 API 密钥、多租户 ID、特殊的缓存标记)时,HttpEntity 更加聚合,避免了方法签名中出现过多的参数。

2. 它在 RestTemplate 中的对称性

如果你使用过 RestTemplate 来调用别人的 API,你会发现你也是把对象封装在 HttpEntity 里发出去的。 在 Controller 里用它,保持了代码风格的一种“对称美”

Based on Spring Framework.