java怎么调用接口:主流方案对比
java怎么调用接口,有四种主流实现方式,HttpURLConnection是原生无依赖方案,RestTemplate适合Spring老项目,OkHttp侧重连接复用与超时控制,OpenFeign适合SpringCloud微服务场景,你可以根据项目是否引入Spring、是否需要服务发现、并发量高低来选型;原生HttpURLConnection不推荐高并发场景,它没有连接池,频繁创建销毁连接会带来明显性能损耗,适合简单一次性请求、测试脚本、无框架的普通Java项目,SpringBoot项目优先选OpenFeign,独立Java程序优先OkHttp。
java怎么调用接口之原生HttpURLConnection
你不需要引入额外依赖,JDK自带这个类,直接通过URL对象打开连接,设置请求方式、请求头、超时时间,再输出请求体、读取响应流。POST请求要手动设置Content-Type,JSON格式就填application/json,参数需要自己拼接成JSON字符串,响应结果要手动处理字节流转字符串,异常捕获、编码处理都要自己写。
这个方式上手门槛低,但是代码冗余,没有内置连接池,每次调用都会新建TCP连接,并发请求多的时候延迟会上升,只适合单次、低频调用外部接口的场景。
java怎么调用接口之OkHttp
你需要在Maven或者Gradle引入OkHttp依赖,它自带连接池、自动重连、超时分组配置,支持同步调用和异步回调两种模式,异步适合大量并发请求,避免线程阻塞。发送JSON请求时搭配OkHttp配套的FormBody或者RequestBody,配合Jackson完成对象和JSON互相转换,响应对象封装完善,能直接拿到响应码、响应头、响应文本。
它的API简洁,超时可以单独设置连接超时、读取超时、写入超时,很多第三方接口对接项目都会选用它,独立Java程序、Spring项目都能直接使用,不受Spring版本约束。
java怎么调用接口之Spring生态方案
| 方式 | 依赖框架 | 核心优势 | 适用场景 |
|---|---|---|---|
| RestTemplate | Spring | Spring内置,可直接注入,支持对象序列化 | SpringBoot低版本,简单同步调用 |
| OpenFeign | SpringCloud | 声明式接口,写接口注解即可调用,整合负载均衡 | 微服务之间互相调用,统一接口管理 |
| WebClient | SpringWebFlux | 响应式非阻塞,高并发吞吐量更好 | 响应式项目,大量异步接口请求 |
OpenFeign只需要定义一个接口,加上@FeignClient注解,接口方法上写@RequestMapping,参数和返回值直接用Java实体类,底层自动完成序列化和网络请求,不用手动拼接请求报文。它可以整合Nacos、Eureka这类注册中心,自动获取服务地址,写出来的代码和调用本地方法几乎一致,维护成本更低。
WebClient属于非阻塞模型,适合IO密集型、高并发的系统,学习成本比RestTemplate高,需要理解响应式编程,普通业务系统没有高并发需求时,不必强行选用。
处理请求参数和返回体,你一般搭配Jackson,使用ObjectMapper完成实体类和JSON字符串转换,时间、空值、字段别名这类序列化规则可以统一配置,减少重复代码。
接口调用必须设置超时。
所有方式都要处理接口异常,包含网络超时、对方返回4xx、5xx状态码、返回JSON格式错误,你可以封装统一异常处理,根据状态码区分参数错误、服务不可用,不要直接抛出原始异常给上层业务。调用第三方接口时,建议增加重试机制,重试只针对幂等接口,查询类接口适合重试,提交订单、扣款这类非幂等接口不能开启重试,防止重复提交。
