jdk11新特性——标准Java异步HTTP客户端

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk11新特性——标准Java异步HTTP客户端相关的知识,希望对你有一定的参考价值。

目录

一、概述

  • Java 9 开始引入的一个处理 HTTP 请求的的 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。

二、HTTP Client 同步发送请求使用示例

2.1、创建简单的服务端

  • 创建springboot项目,创建简单测试类,通过浏览器该请求,模拟服务端即可,代码如下:

    package com.xz.jdk11.day1;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RequestMapping("/test")
    @RestController
    public class TestController 
    
        @RequestMapping("/hello")
        public String hello()
            return "123456";
        
    
    
  • 启动springboot项目,浏览器输入访问地址,右下图可知,可正常返回结果即可,至此,模拟的服务端已完成。

2.2、创建HTTP Client 同步代码

  • 创建HTTP Client 同步代码示例,访问地址为2.1步骤中的服务地址

    package com.xz.jdk11.day1;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.ExecutionException;
    
    public class Test5 
        public static void main(String[] args) throws Exception
          t1();
        
        /**
         * HTTP Client 同步简单使用示例
         * */
        public static void t1() throws IOException, InterruptedException 
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/hello")).build();
            HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();
            HttpResponse<String> response = client.send(request, responseBodyHandler);
            String body = response.body();
            System.out.println(body);
        
    
    
  • 运行测试类,如下图所示,可以拿到服务端地址返回结果:

三、HTTP Client 异步发送请求使用示例

3.1、创建简单的服务端(参考2.1)

3.2、创建HTTP Client 异步代码

  • 创建HTTP Client 异步代码示例

    package com.xz.jdk11.day1;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.concurrent.CompletableFuture;
    import java.util.concurrent.ExecutionException;
    
    public class Test5 
        public static void main(String[] args) throws Exception
          t1();
        
    
        /**
         * HTTP Client  异步发送请求使用示例
         * */
        public static void t1() throws ExecutionException, InterruptedException 
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/hello")).build();
            HttpResponse.BodyHandler<String> responseBodyHandler = HttpResponse.BodyHandlers.ofString();
            CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler);
            HttpResponse<String> response = sendAsync.get();
            String body = response.body();
            System.out.println(body);
        
    
    
    
  • 运行测试类,如下图所示,可以拿到服务端地址返回结果:

以上是关于jdk11新特性——标准Java异步HTTP客户端的主要内容,如果未能解决你的问题,请参考以下文章

整理Java 11新特性总结

java 11 标准Java异步HTTP客户端

JDK 11有望实现JEP 321: HTTP Client (Standard) 特性

Java 11 HTTP 客户端异步执行

Java 11:用Java处理HTTP和WebSockets的新方法!

java新特性--07--JDK11