首页 > 其他分享 >HttpHeaders类详解,这一篇就够了

HttpHeaders类详解,这一篇就够了

时间:2024-07-20 21:01:16浏览次数:10  
标签:set 头字 就够 add 详解 头字段 方法 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消息头。

标签:set,头字,就够,add,详解,头字段,方法,HttpHeaders
From: https://blog.csdn.net/weixin_73922932/article/details/140574011

相关文章

  • 【2024最新版】Vue前端面试篇,看这一篇就够了
    文章目录Vue常用的指令都有哪些v-bind和v-model的区别Vue2的生命周期有哪些Vue3的生命周期有哪些vue3中创建响应式变量的方法ref和reactive原理vuex有哪些方法vue-router生命周期钩子vue框架和原生JavaScript有什么区别对于提升项目加载速度和运行效率是怎么做的webpack......
  • Java 代理模式详解
    Java代理模式详解1.代理模式代理模式是一种比较好理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象(realobject)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目......
  • Android开发 - xmlns命名空间中tools详解
    xmlns:tools是什么命名空间tools可以告诉AndroidStudio,哪些属性在运行的时候是被忽略的,只在设计布局的时候有效。比如我们要让android:text属性只在布局预览中有效。tools可以覆盖android的所有标准属性,将android:换成tools:即可。同时在运行的时候就连tools:本身都是被忽略......
  • 中介者模式详解:概念、优点及实例
    目录中介者模式中介者模式结构中介者模式适用场景中介者模式优缺点练手题目题目描述输入描述输出描述题解中介者模式中介者模式是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。......
  • C语言-“关系”,“条件”,“逻辑”操作符详解
    目录关系操作符 “==”与“=”的区别 多个关系运算符不宜连用多个关系运算符判断值是否在中间的写法条件操作符逻辑操作符逻辑取反操作符:!逻辑与运算符:&& 逻辑或运算符:||练习:闰年的判断短路 关系操作符c语言用于比较的表达式,称为“关系表达式”(relational......
  • Java中的枚举详解
    文章目录概述使用枚举枚举的实现枚举的性能枚举与常量枚举集合类枚举与泛型枚举与反射概述枚举在Java中是一种特殊的类,用来定义一组固定的常量。它在Java5中引入,提供了一种类型安全的方式来定义和使用常量集合。尽管enum看起来像是新的数据类型,但它实际上是一个受限......
  • 【Python】使用库 -- 详解
    库就是别人已经写好了的代码,可以让我们直接拿来用。一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备。所谓的“生态” 指的就是语言是否有足够丰富的库,来应对各种各样的场景。在实际开发中,也并非所有的代码都自己手写,而是要充分利......
  • 【数据结构初阶】顺序表三道经典算法题(详解+图例)
    Hello!很高兴又见到你了~~~看看今天要学点什么来充实大脑吧——目录1、移除元素【思路+图解】 【总结】2、删除有序数组中的重复项【思路+图解】【总结】3、合并两个有序数组【思路+图解】【总结】 至此结束,ShowTime!1、移除元素【思路+图解】 ......
  • 【数据结构】详解堆
    一、堆的概念堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆是非线性数据结构,相当于一维数组,有两个直接后继。如果有一个关键码的集合K={k₀,k₁,k₂,k₃,…,kₙ₋₁ },把它的所有元素按完全二叉树的顺序存储方......
  • 【数据结构】超详解二叉树
    1、树的概念及结构堆与树的结构类似堆的概念及代码实现-CSDN博客树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根结点没有前驱结点除......