HttpHeaders类详解,这一篇就够了

一.总述

在Java中,HttpHeaders 是一个用于表示HTTP请求或响应头的类,它属于 java.net.http 包,从Java 11开始引入。这个类提供了一种方便的方式来操作HTTP消息头,包括添加、删除和获取头字段的值。

以下是 HttpHeaders 类的一些关键特性和用法:

  1. 不可变性HttpHeaders 实例是不可变的,这意味着一旦创建,就不能更改其内容。这有助于确保线程安全性。

  2. 构建器模式HttpHeaders 的实例是通过构建器模式创建的,这允许你以一种灵活和链式的方式设置头字段。

  3. 头字段操作:你可以使用 setaddremoveclear 等方法来操作头字段。

  4. 遍历头字段:可以通过迭代器或使用 namesvalues 方法来遍历头字段。

  5. 获取头字段值:可以使用 firstValueallValues 方法来获取头字段的值。

  6. 条件请求HttpHeaders 类还支持创建条件请求,例如 If-Modified-SinceIf-None-Match

二.案例展示

import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.URI;
import java.util.List;

public class HttpHeadersExample {
    public static void main(String[] args) {
        try {
            // 创建HttpRequest对象
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("http://example.com"))
                    .headers(
                        HttpHeaders.of()
                            .set("Content-Type", List.of("application/json"))
                            .add("Accept", "application/json")
                    )
                    .build();

            // 创建新的HttpHeaders实例
            HttpHeaders headers = HttpHeaders.of()
                    .set("Authorization", "Bearer token_value")
                    .add("Custom-Header", "value1")
                    .remove("Custom-Header", "value1")
                    .build();

            // 获取头字段的值
            List<String> contentType = headers.allValues("Content-Type");
            String firstValueOfAccept = headers.firstValue("Accept");

            // 打印头字段的值
            System.out.println("Content-Type: " + contentType);
            System.out.println("First value of Accept: " + firstValueOfAccept);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们首先创建了一个 HttpRequest 对象,并在构建器中设置了一些头字段。然后,我们使用 HttpHeaders.of() 构建器创建了一个新的 HttpHeaders 实例,并对其进行了一些操作,如添加、删除和获取头字段的值。

三.set方法和add方法的区别

1. set 方法:

  • 当你使用 set 方法时,它会将指定的头字段设置为一个特定的值。如果该头字段之前已经存在,set 方法会替换其所有现有的值。
  • set 方法接受一个头字段名和一个值(或者值的列表)。如果你传递一个值列表,该头字段将被设置为具有多个值,但在HTTP协议中,每个字段名只能对应一个值,即使它看起来像多个值,它们也会被合并为一个单一的头字段行。
  • 使用 set 方法可以确保你为特定的头字段提供一个精确的值或一组值,这可能对某些需要精确控制头字段值的场景很有用。

示例用法:

HttpHeaders headers = HttpHeaders.of()
    .set("Content-Type", "application/json");

2. add 方法:

  • add 方法用于向现有的头字段添加额外的值。如果头字段不存在,add 方法会创建一个新的头字段,并添加指定的值。
  • 如果头字段已经存在,add 方法将不会替换现有的值,而是将新值追加到现有值列表中。这意味着使用 add 方法可以创建具有多个值的头字段。
  • add 方法允许你为已有的头字段添加更多的值,而不影响其他已存在的值。

示例用法:

HttpHeaders headers = HttpHeaders.of()
    .add("Accept", "application/json")
    .add("Accept", "text/html");

在这个例子中,set 方法将 “Content-Type” 头字段设置为 “application/json”,而 add 方法为 “Accept” 头字段添加了两个值:“application/json” 和 “text/html”。

区别总结:

  • set 方法用于设置或替换头字段的值。如果你为一个已存在的头字段使用 set,它将替换该头字段的所有现有值。
  • add 方法用于向现有的头字段添加新的值。如果你为一个不存在的头字段使用 add,它将创建一个新的头字段。

在选择使用 set 还是 add 方法时,你需要根据你的具体需求来决定,例如,你是否需要替换现有的头字段值,或者是否需要为一个头字段添加多个值。

总结

HttpHeaders 类是Java 11及以后版本中处理HTTP头字段的推荐方式,提供了一种现代、灵活且线程安全的方法来操作HTTP消息头。

相关推荐

  1. HttpHeaders详解

    2024-07-20 17:54:03       18 阅读
  2. 入门SAM看

    2024-07-20 17:54:03       31 阅读
  3. Rust async,看

    2024-07-20 17:54:03       29 阅读
  4. 关于基本算法思想

    2024-07-20 17:54:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 17:54:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 17:54:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 17:54:03       45 阅读
  4. Python语言-面向对象

    2024-07-20 17:54:03       55 阅读

热门阅读

  1. WPF中UI元素继承关系

    2024-07-20 17:54:03       21 阅读
  2. Linux复习01

    2024-07-20 17:54:03       16 阅读
  3. 算法刷题笔记 八数码(C++实现)

    2024-07-20 17:54:03       19 阅读
  4. Apollo开发指南

    2024-07-20 17:54:03       18 阅读
  5. Day05 Redis 面试题 下

    2024-07-20 17:54:03       18 阅读
  6. 【鸿蒙学习笔记】UI・页面路由 (@ohos.router)

    2024-07-20 17:54:03       19 阅读
  7. 《设计模式之美》学习笔记1

    2024-07-20 17:54:03       16 阅读
  8. WebKit 引擎:Web 组件的崛起与支持

    2024-07-20 17:54:03       20 阅读
  9. Python函数传参

    2024-07-20 17:54:03       17 阅读