# JDK HTTP Client 使用教程 基于 JDK 自带模块 `java.net.http`(Java 11+,本仓库使用 Java 17)的实战示例项目, 围绕一个本地运行的 User Management API,演示 JDK HTTP Client 的核心用法。 每个知识点均包含:示例代码、JUnit 测试、文字说明。 ## 项目结构 ``` httpClient/ ├── src/ # JDK HTTP Client 示例与测试(根模块,Java 17) │ ├── main/java/space/anyi/httpClient/ │ │ ├── model/ # UserRequest / UserVO / FileVO / Result 模型 │ │ ├── QuickStart.java # 快速入门:请求构造与响应处理 │ │ ├── GetExample.java # GET 请求 │ │ ├── PostExample.java # POST 请求(JSON) │ │ ├── PutDeleteExample.java # PUT / DELETE 请求 │ │ ├── HeaderExample.java # 请求头 │ │ ├── BodyExample.java # 请求体 / multipart 文件上传 │ │ ├── FileDownloadExample.java # 文件下载 │ │ ├── SyncAsyncExample.java # 同步与异步 │ │ ├── ResponseHandlerExample.java # 响应处理器 │ │ ├── ClientConfigExample.java # HTTP Client 配置 │ │ ├── RequestConfigExample.java # HTTP Request 配置 │ │ └── CoreApiExample.java # 核心对象 API 一览 │ └── test/java/space/anyi/httpClient/ # 12 个测试类(JUnit 5) ├── API_server/ # User Management API(Spring Boot 3.5,独立模块) ├── httpClient.md # 主题大纲 ├── doc.md # 详细使用文档 └── blog.md # 教程 blog(doc.md 的 blog 化渲染) ``` ## 环境要求 - JDK 17+ - Maven 3.6+ ## 快速开始 ```bash # 1. 启动 API 服务(独立 Spring Boot 应用,监听 8080 端口) mvn -f API_server/pom.xml spring-boot:run # 2. 运行全部测试(需先启动 API 服务) mvn test # 2'. 运行单个测试类 mvn -Dtest=GetExampleTest test ``` > 注意:测试会真实调用本地 API,**必须**先启动 API 服务,否则网络相关测试会失败。 ## API 端点 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/users` | 查询用户列表 | | GET | `/api/users/{id}` | 按 id 查询单个用户 | | POST | `/api/users` | 创建用户(JSON) | | PUT | `/api/users/{id}` | 整体更新用户(JSON) | | DELETE | `/api/users/{id}` | 删除用户 | | POST | `/api/files/upload` | 文件上传(multipart/form-data) | | GET | `/api/files/download/{storedFileName}` | 按存储文件名下载文件 | 用户字段(`UserRequest`):`name`、`account`、`sex` 均必填,`account` 唯一, 重复创建返回 409。所有接口返回统一包装结构 `{code, message, data}`。 文件上传结果存于 `uploads/` 目录(已 gitignore)。 启动后可通过 Swagger UI(springdoc)浏览接口文档: `http://localhost:8080/swagger-ui.html` ## 文档 | 文件 | 内容 | |------|------| | `httpClient.md` | 主题大纲(文档结构的事实来源) | | `doc.md` | 详细使用文档 | | `blog.md` | blog 版教程 | ## 涉及知识点 - GET / POST / PUT / DELETE 请求 - 请求头与请求体(JSON、输入流、multipart 文件上传) - 文件上传与下载 - 同步 `send()` 与异步 `sendAsync()`、批量并发 - 内置与自定义响应处理器(BodyHandler / BodySubscriber) - HTTP Client 与 HTTP Request 配置项 - 核心对象(HttpClient / HttpRequest / HttpResponse / HttpHeaders)API