HttpEntity 详解
什么是 HttpEntity
HttpEntity 是 Spring 框架中的一个核心类,用于封装 HTTP 请求或响应的完整实体信息,包括头部信息(headers)和主体内容(body)。它作为 HTTP 消息处理的基础类,也是 ResponseEntity 的父类。
主要作用
封装 HTTP 请求/响应的头部信息
封装 HTTP 请求/响应的主体内容
作为控制器方法的参数接收请求数据
作为控制器方法的返回值表示响应数据
类结构关系
HttpEntity
├── RequestEntity // 专门用于请求的实体类
└── ResponseEntity // 专门用于响应的实体类
作为请求参数使用
在控制器方法中,HttpEntity 可以接收整个请求的信息:
@RequestMapping("/handleRequest")
public String handleRequest(HttpEntity<String> httpEntity) {// 获取请求头HttpHeaders headers = httpEntity.getHeaders();// 获取请求体String body = httpEntity.getBody();// 处理请求信息...return "result";
}
常用方法
获取头部信息
HttpHeaders getHeaders() // 返回HTTP头部信息对象
获取主体内容
T getBody() // 返回HTTP消息的主体内容
判断是否有主体内容
boolean hasBody() // 如果存在主体内容则返回true
HttpHeaders 详解
HttpHeaders 是 HttpEntity 中用于管理头部信息的类,提供了丰富的方法操作 HTTP 头部:
// 获取所有头部名称
Set<String> headerNames = httpEntity.getHeaders().keySet();// 获取特定头部的值
List<String> contentTypes = httpEntity.getHeaders().get("Content-Type");// 检查是否包含特定头部
boolean hasAccept = httpEntity.getHeaders().containsKey("Accept");
典型应用场景
接收完整请求信息:当需要同时处理请求头和请求体时
构建复杂请求:在使用 RestTemplate 调用外部 API 时,构建包含自定义头部的请求:
HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer token123"); headers.setContentType(MediaType.APPLICATION_JSON);HttpEntity<String> request = new HttpEntity<>(jsonBody, headers); restTemplate.postForObject(url, request, Response.class);
处理文件上传下载:结合输入输出流处理文件时,封装文件数据和相关头部信息
与 @RequestHeader 的区别
@RequestHeader
只能获取单个请求头信息HttpEntity
可以获取所有请求头信息和请求体内容HttpEntity
功能更全面,适合需要完整请求信息的场景
总结
HttpEntity 是 Spring 处理 HTTP 消息的核心类,它提供了统一的方式来访问和操作 HTTP 消息的头部和主体内容。通过 HttpEntity 及其子类 RequestEntity 和 ResponseEntity,开发者可以灵活地处理各种 HTTP 交互场景,尤其是在需要精细控制请求和响应的情况下非常有用。