news 2026/3/16 17:18:55

在 Java 中使用 RestTemplate 传递 HTTP Header

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Java 中使用 RestTemplate 传递 HTTP Header

Java 中使用RestTemplate传递 HTTP Header 有多种方式,以下是常用的几种方法:

1. 使用HttpHeadersHttpEntity(推荐)

java

复制

import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; public class RestTemplateExample { public void sendRequestWithHeaders() { RestTemplate restTemplate = new RestTemplate(); // 创建请求头 HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Bearer your_token_here"); headers.set("Content-Type", "application/json"); headers.set("X-Custom-Header", "custom_value"); // 如果有多个相同名称的header,使用add headers.add("X-Request-ID", "uuid-123"); // 创建请求实体(body可以是null对于GET请求) HttpEntity<String> entity = new HttpEntity<>(headers); // 发送GET请求 ResponseEntity<String> response = restTemplate.exchange( "https://api.example.com/data", HttpMethod.GET, entity, String.class ); String result = response.getBody(); } }

2. POST 请求带 Header 和 Body

java

复制

public void postWithHeaders() { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBearerAuth("your_jwt_token"); // 设置Bearer Token // 请求体 String jsonBody = "{\"name\":\"test\",\"value\":123}"; // 组合header和body HttpEntity<String> entity = new HttpEntity<>(jsonBody, headers); ResponseEntity<String> response = restTemplate.postForEntity( "https://api.example.com/create", entity, String.class ); }

3. 使用ClientHttpRequestInterceptor(全局配置)

如果需要为所有请求添加相同的 Header(如统一的认证信息):

java

复制

import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.support.HttpRequestWrapper; public class RestTemplateConfig { public RestTemplate createRestTemplateWithInterceptor() { RestTemplate restTemplate = new RestTemplate(); // 添加拦截器 restTemplate.getInterceptors().add((request, body, execution) -> { request.getHeaders().set("Authorization", "Bearer " + getToken()); request.getHeaders().set("X-API-Key", "your_api_key"); return execution.execute(request, body); }); return restTemplate; } private String getToken() { // 获取token的逻辑 return "dynamic_token"; } }

4. 使用RequestCallback(更底层控制)

java

复制

public void requestWithCallback() { RestTemplate restTemplate = new RestTemplate(); RequestCallback requestCallback = request -> { request.getHeaders().set("Authorization", "Bearer token123"); // 可以在这里写入body }; ResponseExtractor<String> responseExtractor = response -> new String(response.getBody().readAllBytes()); String result = restTemplate.execute( "https://api.example.com/data", HttpMethod.GET, requestCallback, responseExtractor ); }

5. 使用UriComponentsBuilder+ Header

java

复制

public void getWithParamsAndHeaders() { RestTemplate restTemplate = new RestTemplate(); // 构建URL String url = UriComponentsBuilder .fromHttpUrl("https://api.example.com/search") .queryParam("page", 1) .queryParam("size", 10) .toUriString(); HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); HttpEntity<Void> entity = new HttpEntity<>(headers); ResponseEntity<String> response = restTemplate.exchange( url, HttpMethod.GET, entity, String.class ); }

常用 Header 设置方法

表格

复制

方法说明
headers.set(key, value)设置单个header(覆盖已有)
headers.add(key, value)添加header(支持多值)
headers.setContentType(MediaType)设置Content-Type
headers.setBearerAuth(token)设置Bearer认证
headers.setBasicAuth(username, password)设置Basic认证
headers.setAll(Map)批量设置

注意事项

  1. Spring Boot 3.x / Spring 6+RestTemplate已被标记为弃用,建议迁移到WebClient(响应式)或RestClient(Spring 6.1+)

  2. 线程安全RestTemplate是线程安全的,建议配置为单例

  3. 编码问题:中文内容建议设置MediaType.APPLICATION_JSON_UTF8

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/16 5:00:56

语义解析十年演进

语义解析&#xff08;Semantic Parsing&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“将语言翻译成机器指令”向“理解人类意图并自主执行复杂任务”演进的十年。 这十年中&#xff0c;语义解析完成了从**结构化数据库查询&#xff08;Text-to-SQL&…

作者头像 李华
网站建设 2026/3/16 5:00:57

运维系列【仅供参考】:阿里云NTP配置方法

阿里云NTP配置方法 NTP配置方法 NTP 简介 配置方法 Linux 服务器上快速配置阿里巴巴 OPSX NTP服务 互联网上的服务器: 阿里云 ECS 服务器: 对于使用 chrony 客户端的 linux 主机 底下评论 问题一 问题二 其他人回答 问题三 问题四 问题五 其他人回答 问题六 NTP配置方法 NTP …

作者头像 李华
网站建设 2026/3/16 5:00:55

免费STL文件下载网站推荐,3D打印避坑指南

在寻找3D打印模型时&#xff0c;获取高质量、可用的STL文件是关键的第一步。作为多年的3D打印爱好者&#xff0c;我深知选择一个靠谱的STL文件下载网站&#xff0c;直接关系到打印项目的成败。本文将结合我的实际使用经验&#xff0c;为你剖析几个主流平台的核心差异和避坑要点…

作者头像 李华
网站建设 2026/3/16 5:00:56

亲测好用! 降AI率网站 千笔·专业降AI率智能体 VS Checkjie,本科生首选

在AI技术迅速发展的今天&#xff0c;越来越多的学生开始借助AI工具辅助论文写作&#xff0c;以提高效率和内容质量。然而&#xff0c;随之而来的“AI率超标”问题也日益凸显&#xff0c;成为学术写作中的一大隐患。随着查重系统不断升级&#xff0c;AI生成内容被识别的风险越来…

作者头像 李华