下面这个例子用 POST 方式将数据发送到给定的 URL.与 BodyHandlers 类似,这里使用 BodyPublishers 来定义请求体中要发送的数据类型,如字符串、字节数组、文件或输入流:
var request = HttpRequest.newBuilder()
.uri(URI.create(“https://postman-echo.com/post”))
.header(“Content-Type”, “text/plain”)
.POST(HttpRequest.BodyPublishers.ofString(“Hi there!”))
.build();
var client = HttpClient.newHttpClient();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode()); // 200
下面的例子演示了通过 BASIC-AUTH 方式进行认证的方法:
var request = HttpRequest.newBuilder()
.uri(URI.create(“https://postman-echo.com/basic-auth”))
.build();
var client = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(“postman”, “password”.toCharArray());
}
})
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode()); // 200
集合
像 List、Set 和 Map 等集合类都加入了新的方法。List.of 会根据给定的参数创建一个新的不可变的 list.List.copyOf 能创建 list 的不可变副本。
var list = List.of(“A”, “B”, “C”);
var copy = List.copyOf(list);
System.out.println(list == copy); // true
因为 list 已经是不可变的了,因此不需要实际创建 list 实例的副本,因此 list 和 copy 会指向同一个副本。但如果赋值一个可变的列表,copy 就会生成一个新的实例,以保证修改原始列表时不会产生副作用:
var list = new ArrayList();
var copy = List.copyOf(list);
System.out.println(list == copy); // false
在创建不可变的 map 时,不需要自行创建 map 的内容,只需要传递键和值即可:
var map = Map.of(“A”, 1, “B”, 2);
System.out.println(map); // {B=2, A=1}