Builder不能转换为HttpRequest



尝试在Java 17中使用HttpClient进行get请求。我找到的所有文档都告诉我应该能够这样做:

HttpClient client = HttpClient.newHttpClient();
URI uri = new URI("https://postman-echo.com/get");
HttpRequest request = HttpRequest.newBuilder(uri);

但是,我得到一个错误

XmlTools.java:44: error: incompatible types: Builder cannot be converted to HttpRequest
HttpRequest request = HttpRequest.newBuilder(uri);
^

如果我把最后一行改成

Builder request = HttpRequest.newBuilder(uri);

然后这个错误消失了,但下一部分失败

try {
HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
}
XmlTools.java:50: error: incompatible types: Builder cannot be converted to HttpRequest
HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
^

详细编译给我

XmlTools.java:50: error: method send in class HttpClient cannot be applied to given types;
HttpResponse<InputStream> response = client.send(request, HttpResponse.BodyHandlers.ofInputStream());
^
required: HttpRequest,BodyHandler<T>
found:    Builder,BodyHandler<InputStream>
reason: cannot infer type-variable(s) T
(argument mismatch; Builder cannot be converted to HttpRequest)
where T is a type-variable:
T extends Object declared in method <T>send(HttpRequest,BodyHandler<T>)
1 error

我注意到的另一件事,不确定是否相关,是我无法像这样堆叠方法:

HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://postman-echo.com/get"))
.headers("key1", "value1", "key2", "value2")
.GET()
.build();

我在一个错误的环境吗?我在Windows上使用OpenJDK。

编辑:是的,这是用户错误。我应该复制粘贴而不是选择我需要的。谢谢你的宝贵时间。

HttpRequest.newBuilder(uri)返回一个HttpRequest.Builder。您必须调用.build方法来创建实际的HttpRequest实例:

HttpRequest request = HttpRequest.newBuilder(uri).build();

您可以在这里了解有关Builder设计模式的信息。

最新更新