zoukankan      html  css  js  c++  java
  • java 11 标准Java异步HTTP客户端

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

    来看一下 HTTP Client 的用法:

    var request = HttpRequest.newBuilder()
    
    .uri(URI.create("https://javastack.cn"))
    
    .GET()
    
    .build();
    
    var client = HttpClient.newHttpClient();
    
    // 同步
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
    
    // 异步
    
    client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
    
    .thenApply(HttpResponse::body)
    
    .thenAccept(System.out::println);
    

    上面的 .GET() 可以省略,默认请求方式为 Get!

    例子:

    import static org.junit.Assert.*;
    
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.net.http.HttpResponse.BodyHandler;
    import java.net.http.HttpResponse.BodyHandlers;
    import java.util.concurrent.CompletableFuture;
    
    import org.junit.Test;
    
    public class HTTPClientTest {
    	
    	@Test
    	public void testName2() throws Exception {
    		HttpClient client = HttpClient.newHttpClient();
    		HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build();
    		BodyHandler<String> responseBodyHandler = BodyHandlers.ofString();
    		CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler);
    		sendAsync.thenApply(t -> t.body()).thenAccept(System.out::println);
    		//HttpResponse<String> response = sendAsync.get();
    		//String body = response.body();
    		//System.out.println(body);
    		
    	}
    	
    	@Test
    	public void testName() throws Exception {
    		HttpClient client = HttpClient.newHttpClient();
    		HttpRequest request = HttpRequest.newBuilder(URI.create("http://127.0.0.1:8080/test/")).build();
    		BodyHandler<String> responseBodyHandler = BodyHandlers.ofString();
    		HttpResponse<String> response = client.send(request, responseBodyHandler);
    		String body = response.body();
    		System.out.println(body);
    	}
    }
    
    
  • 相关阅读:
    Spring bean的循环依赖以及解决方式
    在Java中为什么实现了Cloneable接口,就能调用Object的clone方法?
    Java-Objects类-deepEquals()和equals()详解
    Linux TCP状态TIME_WAIT 过多的处理
    mysql字符串区分大小写的问题
    java 类加载
    java native 理解
    Maven配置阿里镜像仓库
    Cannot find name ‘XX‘. Do you need to change your target library? Try changing the `lib` compiler
    Typescript Interfaces(接口)添加任意key值/内容
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10351130.html
Copyright © 2011-2022 走看看