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 里用它,保持了代码风格的一种“对称美”。