本文档涵盖 Spring Framework 的 HTTP 消息表示和 URI 构建/解析功能。它包括用于处理 HTTP 标头、请求/响应实体、URI 组件和 URI 模板处理的类。有关 Spring MVC 控制器等特定于 Web 框架的功能,请参阅Spring MVC。有关响应式 Web 客户端功能,请参阅WebFlux 和响应式编程。
Spring 为 HTTP 消息提供了全面的抽象,包括标头、实体和状态处理。
HttpHeaders 类提供了 HTTP 标头的类型安全表示,以及用于常见标头和操作的便捷方法。
主要功能
Accept、Content-TypesetBasicAuth、setBearerAuth)来源: spring-web/src/main/java/org/springframework/http/HttpHeaders.java59-97
Spring 提供了 HttpEntity、RequestEntity 和 ResponseEntity,用于表示完整的 HTTP 消息。
RequestEntity 表示包含方法、URL、标头和主体的出站 HTTP 请求
ResponseEntity 表示包含状态、标头和主体的 HTTP 响应
来源: spring-web/src/main/java/org/springframework/http/ResponseEntity.java34-81 spring-web/src/main/java/org/springframework/http/RequestEntity.java33-68
ContentDisposition 类处理文件下载和表单提交中使用的 Content-Disposition 标头。
主要功能
Content-Disposition 标头的解析和生成来源: spring-web/src/main/java/org/springframework/http/ContentDisposition.java41-51
Spring 的 URI 处理功能主要围绕 UriComponents 和 UriComponentsBuilder 展开,用于构建、解析和操作 URI。
URI 构建和解析操作的主要入口。
解析器类型
RFC:严格遵循 RFC 3986 规范,适用于格式良好的 URIWHAT_WG:遵循浏览器 URL 标准的宽松解析常见使用模式
来源: spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java44-74
URI 模板支持变量替换并进行适当的编码
变量扩展
uri.expand(Map.of("id", 123, "type", "user"))uri.expand("value1", "value2")编码策略
encode():先编码模板,然后单独编码变量来源: spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java422-438
UriUtils 为不同的 URI 组件提供精细的编码控制
组件特定编码
编码方法
encodeUriVariables():对变量值进行严格编码encode():组件感知编码来源: spring-web/src/main/java/org/springframework/web/util/UriUtils.java34-55
DefaultUriBuilderFactory 提供了工厂模式,用于创建具有通用配置的 UriBuilder 实例。
编码模式
TEMPLATE_AND_VALUES:预编码模板,严格编码变量VALUES_ONLY:仅编码变量值,不编码模板URI_COMPONENT:扩展后编码最终的 URI 组件NONE:不应用任何编码配置选项
来源: spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java33-44
Spring 支持两种具有不同权衡的 URI 解析算法
RFC 解析器
WhatWG 解析器
解析器选择
UriComponents 输出来源: spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java171-217 spring-web/src/main/java/org/springframework/web/util/RfcUriParser.java28-36
这些 HTTP 和 URI 抽象与 Spring Framework 的其他组件集成
在 Web 框架中的用法
RequestEntity/ResponseEntity 作为控制器方法参数和返回类型HttpHeaders 用于过滤器和拦截器中的标头操作UriComponentsBuilder 用于链接生成和重定向客户端使用
RestTemplate 和 WebClient 在内部使用这些抽象UriBuilderFactory 配置用于一致的 URI 处理Accept 和 Content-Type 标头进行内容协商来源: spring-web/src/main/java/org/springframework/http/ResponseEntity.java35-80 spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java35-47