news 2026/4/16 15:06:10

在 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/16 12:35:16

xycms企业建站系统 v74新功能介绍与适用企业分析

基于多年为企业客户搭建网站的经验&#xff0c;xycms企业建站系统 v74给我留下了深刻印象。它是一款针对中小企业需求优化的内容管理系统&#xff0c;在v74版本中&#xff0c;系统在后台操作体验、安全防护和移动端适配方面都有明显提升。相较于市面上其他建站工具&#xff0c;…

作者头像 李华
网站建设 2026/4/15 15:07:28

Java链表实现教程:节点定义与增删操作详解

链表是数据结构中的基础&#xff0c;在Java中实现链表能帮助我们理解对象引用和动态内存管理的核心机制。与数组不同&#xff0c;链表通过节点间的引用连接数据&#xff0c;提供了更灵活的数据组织方式。掌握链表的Java实现&#xff0c;是深入理解集合框架底层和解决特定算法问…

作者头像 李华
网站建设 2026/4/16 10:51:00

CANN:解构AIGC底层算力,ops-nn驱动神经网络算子加速

CANN&#xff1a;解构AIGC底层算力&#xff0c;ops-nn驱动神经网络算子加速 AIGC的爆发式发展&#xff0c;让生成式AI从技术概念走向千行百业的实际应用&#xff0c;而这一切的底层支撑&#xff0c;是高效的异构计算架构与高性能的神经网络算子。华为CANN&#xff08;Compute …

作者头像 李华
网站建设 2026/4/16 12:44:46

图片验证码识别:pytesseract+opencv入门

在自动化测试、爬虫等场景中&#xff0c;验证码识别是常见的需求。图片验证码作为最基础的验证形式&#xff0c;借助 Python 的 pytesseract&#xff08;Tesseract OCR 引擎的 Python 封装&#xff09;和 OpenCV&#xff08;计算机视觉库&#xff09;&#xff0c;可以快速实现入…

作者头像 李华
网站建设 2026/4/16 10:58:35

救命神器 10个AI论文工具测评:研究生毕业论文+开题报告必备神器

在当前学术研究日益数字化的背景下&#xff0c;研究生群体面临写作效率低、文献检索复杂、格式规范难掌握等多重挑战。为了帮助广大研究者更高效地完成毕业论文与开题报告&#xff0c;我们基于2026年的实测数据与真实用户反馈&#xff0c;推出“10个AI论文工具测评”专题。本次…

作者头像 李华