Java调用外部接口有哪些方式

1.有哪些?

1.HttpURLConnection

1.介绍

1.这是Java标准库提供的一个类,用于发送HTTP请求和接收响应

2.它不需要额外的依赖,但是API相对底层,编写代码时需要处理很多细节,如设置请求头、处理连接和流等

2.代码示例

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpURLConnectionExample {public static void main(String[] args) throws Exception {URL url = new URL("http://example.com/api");HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");// 设置请求头(如果需要)conn.setRequestProperty("User-Agent", "Java-HttpClient/1.0");int responseCode = conn.getResponseCode();System.out.println("Response Code: " + responseCode);// 处理响应...conn.disconnect();}
}

2.Apache HttpClient

1.介绍

1.Apache HttpClient是一个功能强大的HTTP客户端库,提供了比HttpURLConnection更高级别的抽象

2.它支持复杂的HTTP操作,包括持久连接、认证、重定向处理等,并且API设计更加友好

3.需要引入外部依赖,但它是开源社区广泛使用的解决方案之一

2.依赖

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId>
</dependency>

3.代码示例

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class ApacheHttpClientExample {public static void main(String[] args) throws Exception {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet request = new HttpGet("http://example.com/api");try (CloseableHttpResponse response = httpClient.execute(request)) {String responseBody = EntityUtils.toString(response.getEntity());System.out.println("Response Body: " + responseBody);}}}
}

3.OkHttp

1.介绍

1.OkHttp是一个现代的HTTP & HTTP/2客户端,适用于Android和Java应用程序

2.它提供了一种简洁的API来构建请求和处理响应,同时也内置了缓存、连接池等功能以优化性能

3.广泛应用于移动开发领域,但同样适用于一般的Java应用

2.依赖

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId>
</dependency>

3.代码示例

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttpExample {public static void main(String[] args) throws Exception {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://example.com/api").build();try (Response response = client.newCall(request).execute()) {if (!response.isSuccessful()) throw new RuntimeException("Unexpected code " + response);System.out.println("Response Body: " + response.body().string());}}
}

4.Retrofit

1.介绍

1.Retrofit是一个类型安全的HTTP客户端,专门为Android和Java设计

2.它基于OkHttp构建,并添加了对RESTful服务的支持,使得定义和调用API变得非常简单

3.你可以通过注解定义API端点,并自动生成实现代码,从而简化了与远程服务交互的过程

2.依赖

<dependency><groupId>com.squareup.retrofit2</groupId><artifactId>retrofit</artifactId>
</dependency><dependency><groupId>com.squareup.retrofit2</groupId><artifactId>converter-gson</artifactId>
</dependency>

3.代码示例

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.Call;
import retrofit2.http.GET;interface ApiService {@GET("api")Call<String> getData();
}public class RetrofitExample {public static void main(String[] args) {Retrofit retrofit = new Retrofit.Builder().baseUrl("http://example.com/").addConverterFactory(GsonConverterFactory.create()).build();ApiService apiService = retrofit.create(ApiService.class);Call<String> call = apiService.getData();try {retrofit2.Response<String> response = call.execute();System.out.println("Response Body: " + response.body());} catch (Exception e) {e.printStackTrace();}}
}

5.Spring RestTemplate或WebClient

1.介绍

1.如果你在使用Spring框架,那么RestTemplate或新的响应式WebClient是很好的选择

2.RestTemplate是同步的,而WebClient支持非阻塞式的异步调用,适合于响应式编程模型

3.它们集成了Spring生态系统的许多特性,如消息转换器、异常处理等,可以极大地简化HTTP通信的代码

3.代码示例

// RestTemplate Example (Synchronous)
import org.springframework.web.client.RestTemplate;public class RestTemplateExample {public static void main(String[] args) {RestTemplate restTemplate = new RestTemplate();String result = restTemplate.getForObject("http://example.com/api", String.class);System.out.println("Response Body: " + result);}
}// WebClient Example (Reactive)
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;public class WebClientExample {public static void main(String[] args) {WebClient webClient = WebClient.create("http://example.com");Mono<String> result = webClient.get().uri("/api").retrieve().bodyToMono(String.class);result.subscribe(System.out::println);}
}

6.Feign

1.介绍

1.Feign是一个声明式的HTTP客户端,它让开发者可以通过简单的注解来定义HTTP请求,类似于Retrofit

2.它通常与Spring Cloud一起使用,以便在微服务架构中进行服务间通信

3.支持可插拔的编码器和解码器,便于集成不同的数据格式

2.依赖

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR9</version> <!-- 请根据需要选择最新的版本 --><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies><!-- Spring Boot Starter Web for building web, including RESTful, applications --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Feign Client for declarative REST clients --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- Optional: If you are using Eureka for service discovery --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
</dependencies>

3.代码示例

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "example-api", url = "http://example.com")
public interface ExampleClient {@GetMapping("/api")String getApiData();
}public class FeignExample {private final ExampleClient exampleClient;public FeignExample(ExampleClient exampleClient) {this.exampleClient = exampleClient;}public void fetchData() {String data = exampleClient.getApiData();System.out.println("Fetched Data: " + data);}
}

2.区别

1.易用性

HttpURLConnection较为复杂,而像Retrofit、Feign这样的库则大大简化了HTTP请求的创建和管理

2.性能

OkHttp和HttpClient都提供了良好的性能特征,如连接池和高效的流处理

3.依赖管理

除了HttpURLConnection外,其他方式都需要引入第三方库,这可能影响项目的依赖树

4.生态系统支持

如果项目已经在使用某个框架(如Spring),那么使用该框架提供的工具(如RestTemplate或WebClient)可能会带来更好的集成体验

5.并发处理

WebClient和其他响应式客户端更适合处理高并发场景,因为它们是非阻塞的

3.总结

选择哪种方式取决于你的具体需求,比如是否需要处理大量并发请求、是否已经使用特定的框架或者是否有特殊的需求如HTTP/2支持等

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

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

相关文章

pandas系列----DataFrame简介

DataFrame是Pandas库中最常用的数据结构之一&#xff0c;它是一个类似于二维数组或表格的数据结构。DataFrame由多个列组成&#xff0c;每个列可以是不同的数据类型&#xff08;如整数、浮点数、字符串等&#xff09;。每列都有一个列标签&#xff08;column label&#xff09;…

安装完docker后,如何拉取ubuntu镜像并创建容器?

1. 先docker拉取ubuntu镜像 docker search ubuntu #搜索ubuntu 镜像 docker pull ubuntu:22.04 #拉取ubuntu 镜像 docker images #下载完成后&#xff0c;查看已经下载的镜像 docker run --name ubuntu_container -dit ubuntu:22.04 /bin/bash # docker container -l 2.…

Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求

一、前言说明 这几个功能是近期定制的功能&#xff0c;也非常具有代表性&#xff0c;核心就是之前登录和设备信息都是在本地&#xff0c;存放在数据库中&#xff0c;数据库可以是本地或者远程的&#xff0c;现在需要改成通过网络API请求的方式&#xff0c;现在很多的服务器很强…

详细解释 Vue 中的 h 函数和 render 函数:

Vue中的h函数和render函数是Vue中非常重要的函数&#xff0c;对Vue有着不可以或缺的作用&#xff0c;接下来让我们了解一下&#xff01; // 1. h 函数的基本使用 /*** h 函数是 createVNode 的别名&#xff0c;用于创建虚拟 DOM 节点&#xff08;VNode&#xff09;* h 函数参数…

结构型模式3.组合模式

结构型模式 适配器模式&#xff08;Adapter Pattern&#xff09;桥接模式&#xff08;Bridge Pattern&#xff09;组合模式&#xff08;Composite Pattern&#xff09;装饰器模式&#xff08;Decorator Pattern&#xff09;外观模式&#xff08;Facade Pattern&#xff09;享元…

服务器攻击方式有哪几种?

随着互联网的快速发展&#xff0c;网络攻击事件频发&#xff0c;已泛滥成互联网行业的重病&#xff0c;受到了各个行业的关注与重视&#xff0c;因为它对网络安全乃至国家安全都形成了严重的威胁。面对复杂多样的网络攻击&#xff0c;想要有效防御就必须了解网络攻击的相关内容…

Transformer 中缩放点积注意力机制探讨:除以根号 dk 理由及其影响

Transformer 中缩放点积注意力机制的探讨 1. 引言 自2017年Transformer模型被提出以来&#xff0c;它迅速成为自然语言处理&#xff08;NLP&#xff09;领域的主流架构&#xff0c;并在各种任务中取得了卓越的表现。其核心组件之一是注意力机制&#xff0c;尤其是缩放点积注意…

[python3]Excel解析库-XlsxWriter

XlsxWriter 是一个用于创建 Excel .xlsx 文件的 Python 库&#xff0c;它允许你编写程序来生成 Excel 文件&#xff0c;而无需实际运行 Microsoft Excel 应用程序。XlsxWriter 支持写入数据、应用格式化、插入图表和图形等多种功能&#xff0c;并且可以处理较大的数据集。它是一…

Linux下部署SSM项目

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 Linux部署SSM项目 打包项目 1、修改pom.xml文件&#xff0c;打包方式改为war <packaging>war</packaging>2、idea 通过maven的clean&#xff0c;…

Bytebase 3.0.1 - 可配置在 SQL 编辑器执行 DDL/DML

&#x1f680; 新功能 新增环境策略&#xff0c;允许在 SQL 编辑器内直接执行 DDL/DML 语句。 支持为 BigQuery 数据脱敏。 在项目下新增数据访问控制及脱敏管理页面。 在数据库页面&#xff0c;支持回滚到变更历史的某个版本。 &#x1f514; 兼容性变更 禁止工单创建…

ansible 知识点【回顾梳理】

ansible 知识点 1. 剧本2. facts变量3. register变量4. include功能5. handlers6. when 条件7. with_items 循环8. Jinja2模板9. group_vars10. roles :star::star::star: 看起来字数很多&#xff0c;实际有很多是脚本执行结果&#xff0c;内容不多哦 1. 剧本 剧本很重要的就是…

LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库

一、必备条件&#xff1a; python语言Neo4j数据库python库&#xff1a;neo4j、llmsherpa、glob、dotenv 二、代码&#xff1a; from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …

MLU上使用MagicMind GFPGANv1.4 onnx加速!

文章目录 前言一、平台环境准备二、环境准备1.GFPGAN代码处理2.MagicMind转换修改env.sh修改run.sh参数解析运行 3.修改后模型运行 前言 MagicMind是面向寒武纪MLU的推理加速引擎。MagicMind能将人工智能框架&#xff08;TensorFlow、PyTorch、Caffe与ONNX等&#xff09;训练好…

关于大数据的基础知识(一)——定义特征结构要素

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;一&a…

H5通过URL Scheme唤醒手机地图APP

1.高德地图 安卓URL Scheme&#xff1a;baidumap:// 官方文档&#xff1a;https://lbs.amap.com/api/amap-mobile/guide/android/navigation IOS URL Scheme&#xff1a;iosamap:// 官方文档&#xff1a;https://lbs.amap.com/api/amap-mobile/guide/ios/navi HarmonyOS NEXT U…

音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现

音视频入门基础&#xff1a;MPEG2-PS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;1&#xff09;——MPEG2-PS官方文档下载 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ps文件 音视频入门基础…

国标GB28181-2022视频平台EasyGBS小知识:局域网ip地址不够用怎么解决?

在局域网中&#xff0c;IP地址不足的问题通常不会在小型网络中出现&#xff0c;但在拥有超过255台设备的大型局域网中&#xff0c;就需要考虑如何解决IP地址不够用的问题了。 在企业局域网中&#xff0c;经常会出现私有IP地址如192.168.1.x到192.168.1.255不够用的情况。由于0…

spring boot启动源码分析(三)之Environment准备

上一篇《spring-boot启动源码分析&#xff08;二&#xff09;之SpringApplicationRunListener》 环境介绍&#xff1a; spring boot版本&#xff1a;2.7.18 主要starter:spring-boot-starter-web 本篇开始讲启动过程中Environment环境准备&#xff0c;Environment是管理所有…

springmvc前端传参,后端接收

RequestMapping注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Mapping public interface RequestMapping {String name() default "";AliasFor("path")String[] value() default {};AliasFor(&quo…

分布式锁 Redis vs etcd

为什么要实现分布式锁?为什么需要分布式锁,分布式锁的作用是什么,哪些场景会使用到分布式锁?分布式锁的实现方式有哪些分布式锁的核心原理是什么 如何实现分布式锁redis(自旋锁版本)etcd 的分布式锁(互斥锁(信号控制)版本) 分布式锁对比redis vs etcd 总结 为什么要实现分布式…