HttpEntity
类是 Spring 框架中的一个重要类,它用来封装 HTTP 请求或响应的头信息和正文内容。在 Spring 的 RestTemplate
、WebClient
和 RestController
中广泛使用。以下是 HttpEntity
类的详细介绍。
HttpEntity
类概述
HttpEntity<T>
是一个泛型类,其中 T
代表请求或响应的主体类型。它通常用来表示一个 HTTP 请求或响应,其中包括:
- HTTP Headers:请求或响应的头信息。
- HTTP Body:请求或响应的正文内容。
主要构造函数
HttpEntity
提供了几个构造函数,用于创建带有或不带有头信息和正文内容的实例:
- 无参数构造函数:
HttpEntity<T> entity = new HttpEntity<>();
- 带有正文内容的构造函数:
HttpEntity<T> entity = new HttpEntity<>(body);
- 带有头信息的构造函数:
HttpEntity<T> entity = new HttpEntity<>(headers);
- 带有头信息和正文内容的构造函数:
HttpEntity<T> entity = new HttpEntity<>(body, headers);
主要方法
HttpEntity
类提供了一些方法,用于获取封装的头信息和正文内容:
- 获取头信息:
HttpHeaders headers = entity.getHeaders();
- 获取正文内容:
T body = entity.getBody();
示例使用
以下是一些使用 HttpEntity
的示例代码,展示了如何在不同场景中使用它。
在 RestTemplate
中使用 HttpEntity
使用 RestTemplate
发送 HTTP 请求时,通常会使用 HttpEntity
来封装请求头和正文内容。
发送带有请求头和正文内容的 POST
请求:
// 创建请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth("your-token"); // 设置Authorization头
// 创建请求体
User user = new User();
user.setId(1044L);
user.setName("荀铂尧22223");
user.setAge(1044);
user.setAddress("这是测试2");
// 创建HttpEntity对象
HttpEntity<User> requestEntity = new HttpEntity<>(user, headers);
// 发送POST请求
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.postForObject(
"http://localhost:8080/user/insert1",
requestEntity,
String.class);
System.out.println("Response: " + response);
在 WebClient中使用 HttpEntity
WebClient
也可以使用 HttpEntity
来设置请求头和正文内容。
发送带有请求头和正文内容的 POST
请求:
WebClient webClient = WebClient.create();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth("your-token");
HttpEntity<User> requestEntity = new HttpEntity<>(user, headers);
webClient.post()
.uri("http://localhost:8080/user/insert1")
.headers(httpHeaders -> httpHeaders.addAll(requestEntity.getHeaders()))
.bodyValue(requestEntity.getBody())
.retrieve()
.bodyToMono(String.class)
.doOnNext(response -> System.out.println("Response: " + response))
.block();
总结
HttpEntity
是一个用于封装 HTTP 请求或响应的头信息和正文内容的类。它在 Spring 框架中被广泛使用,特别是在 RestTemplate
和 WebClient
中,用于构建和发送 HTTP 请求时非常有用。通过使用 HttpEntity
,你可以方便地设置请求的头信息和正文内容,确保请求按照预期的格式发送到目标服务器。