news 2026/4/24 8:30:26

在 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/4/20 10:10:03

《计算机网络》深入学:从单播到高效分发的演进

在现代网络应用中&#xff0c;无论是观看高清直播、参加多人视频会议&#xff0c;还是金融市场中瞬息万变的数据分发&#xff0c;我们都会接触到一个核心术语&#xff1a;IP 组播&#xff08;IP Multicast&#xff09;。本章将带你深入了解组播的起源、基本原理以及它如何在复杂…

作者头像 李华
网站建设 2026/4/22 7:34:05

无惧户外强光!云卓G16遥控器7寸阳光可视屏实战体验

在烈日炎炎的户外执行无人机作业&#xff0c;屏幕反光、看不清细节是许多飞手的痛点。云卓科技深刻理解这一需求&#xff0c;为G16遥控器配备了一块7英寸的工业级阳光可视触摸屏&#xff0c;分辨率高达1920*1200。这块屏幕的超高亮度和优异的对比度表现&#xff0c;是其核心卖点…

作者头像 李华
网站建设 2026/4/22 17:32:42

开发作文素材积累工具,按主题(亲情/励志/环保),分类存储素材,名言,案例,支持搜索,一键插入作文,提升作文质量。

1. 实际应用场景描述在语文学习、写作训练、考试备考中&#xff0c;学生和老师都需要积累大量优质作文素材&#xff0c;包括&#xff1a;- 亲情类&#xff1a;感人故事、名言警句。- 励志类&#xff1a;名人经历、励志金句。- 环保类&#xff1a;生态保护案例、相关法规、环保口…

作者头像 李华
网站建设 2026/4/18 12:34:24

sudo find / -name redis.conf 2>/dev/null,解释下这个命令

sudo find / -name redis.conf 2>/dev/null&#xff0c;解释下这个命令 这条命令是 Linux 系统中用于查找文件的强力组合。它通常用于当你不知道某个文件具体在哪个目录时&#xff0c;让系统帮你把它“挖”出来。 针对你的需求&#xff0c;这条命令的具体含义如下&#xff1…

作者头像 李华
网站建设 2026/4/18 7:16:05

C语言学习指南:从入门到应用开发全解析

掌握C语言是进入编程世界的关键一步&#xff0c;它作为一门基础且高效的编程语言&#xff0c;至今仍在系统开发、嵌入式等领域扮演着核心角色。学习C语言不仅能帮助理解计算机底层原理&#xff0c;如内存管理、指针操作&#xff0c;更能为学习其他高级语言打下坚实根基。本文将…

作者头像 李华
网站建设 2026/4/23 18:26:30

TONTEK通泰 TTP118-CA6N SOT23-6 触摸芯片

特點 电压工作范围2.4~5.5V 可靠的上电复位(POR)及低电压复位功能(LVR) 低待机工作电流(没有负载) VDD3.3V&#xff0c;典型值4uA&#xff0c;最大值8uAvdd5.0伏&#xff0c;典型值8uA&#xff0c;最大值16uA。 待机模式下,输出响应时间为132ms。 &#xff0c;可由外部电容(1nF…

作者头像 李华