使用 Java 11 的 HttpClient 处理 RESTful Web 服务

在现代 Web 开发中,与 RESTful Web 服务交互是一项核心任务。Java 作为一种广泛使用的编程语言,提供了多种处理 HTTP 请求的方法。在 Java 11 之前,开发者通常使用 HttpURLConnection 或第三方库(如 Apache HttpClient)。然而,这些方法要么过于底层,要么需要额外依赖。Java 11 引入了全新的 HttpClient API,位于 java.net.http 包中,提供了一种更现代化、灵活的方式来处理 HTTP 通信。本文将详细介绍如何使用 Java 11 的 HttpClient 处理 RESTful Web 服务,并通过实际示例展示其功能。

什么是 HttpClient?

HttpClient 是 Java 11 引入的标准 API,用于发送 HTTP 请求和接收响应。它支持以下关键特性:

  • 协议支持:兼容 HTTP/1.1 和 HTTP/2,HTTP/2 提供头部压缩和多路复用等性能优化。
  • 同步和异步:支持阻塞(同步)和非阻塞(异步)请求,适合不同应用场景。
  • 构建器模式:使用流畅的构建器模式配置客户端和请求。
  • 响应处理:通过 BodyHandlers 提供多种方式处理响应体,如字符串、字节数组或文件。
  • 其他功能:支持重定向、代理、认证和 WebSocket。

与旧的 HttpURLConnection 相比,HttpClient 更易用,功能更丰富,适合现代 Web 应用的需要。它不仅限于 RESTful 服务,还可用于下载文件、访问网页等任何需要从 URL 读取数据的场景。

创建 HttpClient 实例

要使用 HttpClient,首先需要创建一个 HttpClient 实例。HttpClient 使用构建器模式,允许配置协议版本、重定向策略等。以下是一个示例:

import java.net.http.HttpClient;
import java.net.http.HttpClient.Redirect;
import java.net.http.HttpClient.Version;HttpClient client = HttpClient.newBuilder().version(Version.HTTP_2) // 优先使用 HTTP/2.followRedirects(Redirect.NORMAL) // 自动跟随重定向.build();

配置说明

  • version(Version.HTTP_2):尝试使用 HTTP/2,若服务器不支持则回退到 HTTP/1.1。
  • followRedirects(Redirect.NORMAL):自动处理重定向,最多跟随一定次数。
  • 其他可选配置包括代理(proxy)、认证(authenticator)等。

创建的 HttpClient 实例是不可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM——垃圾回收

垃圾回收 在Java虚拟机(JVM)的自动内存管理中,垃圾回收(Garbage Collection, GC)是其核心组件之一。它负责回收堆内存中不再使用的对象所占用的内存空间,以供新对象的分配使用。下面我们将深入探讨JVM中的…

经典密码学算法实现

# AES-128 加密算法的规范实现(不使用外部库) # ECB模式S_BOX [0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B,0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0x…

追踪大型语言模型的思想(下)(来自针对Claude的分析)

多步推理 正如我们上面所讨论的,语言模型回答复杂问题的一种方式就是简单地记住答案。例如,如果问“达拉斯所在州的首府是哪里?”,一个“机械”的模型可以直接学会输出“奥斯汀”,而无需知道德克萨斯州,达拉…

【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析

目录 引言 1 增量数据导入概述 1.1 增量同步与全量同步对比 1.2 增量同步技术选型矩阵 2 Sqoop增量导入原理剖析 2.1 Sqoop架构设计 2.2 增量同步核心机制 3 Sqoop增量模式详解 3.1 append模式(基于自增ID) 3.2 lastmodified模式(基…

[Windows] 蓝山看图王 1.0.3.21021

[Windows] 蓝山看图王 链接:https://pan.xunlei.com/s/VOPejo0dRLFd38dbpR7XA6djA1?pwddq9v# 由蓝山软件出品的一款免费高清看图软件,支持快速查看高清大图,支持大部分市面图片格式。 软件特点 1、体积小巧,图像显示效果清晰…

通配符 DNS 记录:应用场景与相关风险

随着组织的互联网基础设施不断扩展,其对配置、设置和决策的需求也随之增加——从选择一个可靠的名称服务器,到确定合适的 DNS 记录类型以及设置合适的 TTL(生存时间)值。其中一项关键决策就是是否要创建通配符 DNS 记录&#xff0…

快速上手知识图谱开源库pykeen教程指南(一)

文章目录 1 前情提要1.1 AmpliGraph 和 PyKEEN 对比介绍1.2 TransE、ConvE、RotatE几款模型的差异 2 直接上案例2.1 数据载入:TriplesFactory2.2 模型训练2.2.1 训练信息2.2.2 TransE模型可以降维实体、关系的关系 2.3 模型保存与加载、评估2.3.1 保存与模型加载2.3…

飞搭系列 | 获取弹窗数据,轻松实现回填

前言 飞搭低代码平台(FeiDa,以下简称“飞搭”),为企业提供在线化、灵活的业务应用构建工具,支持高低代码融合,助力企业低门槛、高效率和低成本地快速应对市场变化,加速复杂业务场景落地。 概要…

Linux如何安装AppImage程序

Linux如何安装AppImage程序 文章目录 Linux如何安装AppImage程序 在 Linux 中,.AppImage 是一种便携式的应用程序格式,无需安装即可运行。 1.赋予该文件可执行权限 可以使用下列命令,赋予可执行权限 # 举个例子 chmod x /path/to/MyApp.App…

云硬盘的原理

云硬盘是云计算环境中的一种存储服务,其原理主要涉及数据存储、数据冗余与容错、性能优化以及数据安全等方面,以下是具体介绍: 数据存储 逻辑卷管理:云硬盘通常会将物理存储设备划分为多个逻辑卷,每个逻辑卷可以独立地…

使用 pgrep 杀掉所有指定进程

使用 pgrep 杀掉所有指定进程 pgrep 是一个查找进程 ID 的工具,结合 pkill 或 kill 命令可以方便地终止指定进程。以下是几种方法: 方法1:使用 pkill(最简单) pkill 进程名例如杀掉所有名为 “firefox” 的进程&…

堆排序(算法题)

#include <bits/stdc.h> using namespace std;const int N 100010; // 堆数组的最大容量 int h[N], s; // h[]存储堆元素&#xff0c;s表示当前堆的大小// 下沉操作&#xff1a;调整以i为根的子树&#xff0c;维护小顶堆性质 void down(int i) {int t i; /…

极狐GitLab 如何将项目共享给群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 共享项目和群组 (BASIC ALL) 在极狐GitLab 16.10 中&#xff0c;更改为在成员页面的成员选项卡上显示被邀请群组成员&#xf…

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛&#xff0c;本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的&#xff0c;之前都是手写 Jenki…

基于windows安装MySQL8.0.40

基于windows安装MySQL8.0.40 基于windows 安装 MySQL8.0.40&#xff0c;解压文件到D:\mysql-8.0.40-winx64 在D:\mysql-8.0.40-winx64目录下创建my.ini文件&#xff0c;并更新一下内容 [client] #客户端设置&#xff0c;即客户端默认的连接参数 # 设置mysql客户端连接服务…

Python小酷库系列:5个常用的dict属性化访问扩展库

5个常用的dict属性化访问扩展库 嵌套结构高级功能性能综合建议 在前面我们详细讲解了 Box和 Munch这两个dict属性化访问的扩展库&#xff0c;总体而言它们主要用于提升配置文件数据、JSON对象数据的可读性&#xff0c;减少了代码中双引号。在这一领域中还有dotmap、addict 和…

OC语言学习——面向对象(下)

一、OC的包装类 OC提供了NSValue、NSNumber来封装C语言基本类型&#xff08;short、int、float等&#xff09;。 在 Objective-C 中&#xff0c;**包装类&#xff08;Wrapper Classes&#xff09;**是用来把基本数据类型&#xff08;如 int、float、char 等&#xff09;“包装…

密码学系列 - SR25519与ED25519

SR25519 SR25519 是一种高级的数字签名算法&#xff0c;它基于 Schnorr 签名方案&#xff0c;使用的是 Curve25519 椭圆曲线。这种签名算法在密码学社区中广受欢迎&#xff0c;特别是在区块链和加密货币领域。以下是关于 SR25519 的详细介绍。 SR25519 简介 SR25519 是一种 …

Vue3源码学习7-PatchFlags使用位算符

文章目录 前言✅ 一、基础知识&#xff1a;什么是二进制&#xff1f;✅ 二、位运算的基本操作✅ 三、左移运算 <<✅ 四、实际用途&#xff1a;如何用于状态标记&#xff08;PatchFlags&#xff09;✅ 五、组合多个状态标记✅ 六、小结口诀&#xff08;记忆&#xff09;✅…

在 Vue 2 中使用 qrcode 库生成二维码

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…