讲师中心 微信公众号
AI工具推荐 视频效率加速

详解Java中的HttpRequest.Builder_流式API构建复杂HTTP请求头

小宇同学_8715

小宇同学_8715

发布时间:2026-02-23 11:26:02

|

1015人浏览过

|

来源于php中文网

原创

header() 追加同名请求头,setHeader() 覆盖同名请求头;Java 17+ 新增 setHeader(),Java 11 不支持;Body 字符串需显式指定 UTF-8 编码,Content-Type 必须与 BodyPublisher 类型匹配;Cookie 需手动设置或配合 CookieHandler 管理;Builder 不可变,每次调用返回新实例,build() 仅能调用一次。

详解java中的httprequest.builder_流式api构建复杂http请求头

HttpRequest.Builder 设置自定义请求头时,header() 和 setHeader() 有啥区别?

header() 是追加模式,同名头可以多次调用,最终会以多个相同字段出现在请求中(HTTP/1.1 允许);setHeader() 是覆盖模式,后调用的会完全替换前一次对同一名称的设置。实际开发中容易误用 header() 导致重复头,比如两次 header("Authorization", "Bearer a"),服务端可能只取第一个或直接拒收。

  • 如果需要确保唯一性(如 Content-Type、Accept),优先用 setHeader()
  • 如果目标服务明确要求多值头(如 Cookie 或自定义追踪头 X-Request-ID),才用 header()
  • 注意:Java 11 的 HttpRequest.Builder 没有 setHeader() —— 这是 Java 17+ 新增方法,低版本只能靠先 build() 再手动构造,或用第三方库兜底

构建带认证和 JSON Body 的 POST 请求,Body 和 Header 怎么配才不翻车?

HttpRequest.newBuilder() 要求 BodyPublisher 必须与 Content-Type 头一致,否则多数 REST 服务会返回 415 Unsupported Media Type。常见错误是写了 setHeader("Content-Type", "application/json"),但 Body 用的是 HttpRequest.BodyPublishers.ofString("...") 而没做 UTF-8 编码声明,导致中文乱码或解析失败。

  • Body 字符串必须显式指定编码:HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)
  • 不要手动拼接 JSON 字符串,避免引号/转义出错;建议用 Jackson/Gson 序列化后传入
  • Content-Length 头由 JDK 自动计算并添加,别自己设,否则可能冲突导致连接被重置
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com/v1/users"))
    .header("Authorization", "Bearer xyz")
    .setHeader("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"张三\"}", StandardCharsets.UTF_8))
    .build();

用 HttpRequest.Builder 发送含 Cookie 的请求,为什么服务端收不到?

JDK 的 HttpClient 默认不自动管理 Cookie,HttpRequest.Builder 更不会读取或写入 Cookie 头——它只是个构造器,不维护状态。你写的 header("Cookie", "sid=abc") 会被发出去,但后续重定向或重试时不会自动带上,也不会从响应里提取新 Cookie 并回填。

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • 若需完整 Cookie 管理,必须配合 HttpClient.newBuilder().cookieHandler(...) 使用 CookieManager
  • 单次请求硬编码 Cookie 头没问题,但要注意有效期和作用域(Path、Domain)
  • 常见坑:把 Set-Cookie 响应头里的值原样当请求头用,漏掉 Expires/Max-Age 判断,结果发了个已过期的 Cookie

流式构建时链式调用中断,Builder 状态会不会残留?

不会。HttpRequest.Builder 是不可变对象,每次调用 header()、GET()、POST(...) 都返回一个新 Builder 实例,原始实例不受影响。但这也意味着:如果中间某步抛异常(比如 URI 解析失败),前面设好的头、method、body 都白写了,没法“回滚”。

立即学习“Java免费学习笔记(深入)”;

  • 别在链式调用中途插逻辑判断,容易断链;建议分步构建,用变量暂存 Builder
  • 所有 setter 类方法(timeout()、version())都遵循同样不可变规则,没有副作用
  • 一个易忽略点:build() 只能调用一次,重复调用会抛 IllegalStateException,不是因为状态残留,而是 Builder 内部标记了“已构建”

事情说清了就结束

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2255

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3642

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1216

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4199

2025.09.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12579

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1266

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

864

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1946

2025.08.19

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn