前言
JDK版本都升级到20了,我们还在使用JDK8,最近我们准备新项目直接升级到JDK17了,JDK9-JDK17还是有很多新功能的,
最近也在学习相关的新功能,准备写一个系列文章,主要学习JDK9-JDK17升级的新功能,本篇先学习JDK自带的HTTPClient。
新的HTTPClient是在JDK9就有了1,JDK9到JDK17使用方式略有同,我们就按最新的JDK17使用方法来学习好了。
HttpClient初始化
HttpClient的初始化有点像OKHTTP,可以通过version指定HTTP协议版本,通过connectTimeout设置超时时间,通过authenticator设置鉴权,通过proxy设置代理
GET请求
为了方便测试,创建一个简单的GET请求方法,接收@PathVariable、@RequestParam、@RequestHeader、@CookieValue类型参数:
请求前我们需要构建出一个HttpRequest,设置对应的URL,Header
使用同步方法发送GET请求
使用异步方法发送GET,可以通过exceptionally处理异常
POST表单数据
创建一个POST接口,接收表单POST数据
通过POST提交Key-Value数据
POST JONS数据
写一个PostMapping 使用@RequestBody来接收JSON数据
通过header设置Content-type为"application/json;charset=utf-8",HttpRequest.BodyPublishers.ofString()传JSON数据
上传文件
创建一个接口,模拟一个用户设置头像,接口接收用户ID和头像文件:
HTTPClient上传文件不是很方便,需要引用httpmime 构建一个MultipartEntity,大图片会报ContentTooLongException: Content length is too long:2,目前没找到比较好的方法来实现文件上传
下载文件
通过CompletableFuture异步下载图片:
并发请求
通过CompletableFuture合并请求
websocket长连接
使用HttpClient创建WebSocket实时通信
参考文章
- JEP 110: HTTP/2 Client (Incubator) (openjdk.org) ↩︎
- jms - Why MultipartEntityBuilder throws org.apache.http.ContentTooLongException? - Stack Overflow; ↩︎