【问题标题】:Java 11 HttpRequest with PATCH method带有 PATCH 方法的 Java 11 HttpRequest
【发布时间】:2020-03-09 12:49:55
【问题描述】:

我尝试使用 java 11 HttpRequest 使用 PATCH 方法调用 msgraph 网络服务:

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;

import java.nio.charset.StandardCharsets;

import groovy.json.JsonSlurper;
import groovy.json.JsonOutput;

access_token = "my_token";

def url = 'https://graph.microsoft.com/v1.0/groups/group_id/drive/items/01P4AIIJ5QTIIAZ2FLEZBIZWRV6KEBIMM5/workbook/worksheets/%7B00000000-0001-0000-0000-000000000000%7D/range(address=\'A1\')'

HttpClient httpClient = HttpClient.newBuilder()
                                    .version(HttpClient.Version.HTTP_2)
                                    .build();

jsonPayloadString = '{"values":["blabla"]}';


jsonPayload = HttpRequest.BodyPublishers.ofString(jsonPayloadString.toString())

HttpRequest request = HttpRequest.newBuilder()
                                 .uri(URI.create(url))
                                 .PATCH(jsonPayload)
                                 .header("Content-Type", "application/json")
                                 .build();

HttpResponse response = httpClient.send(request,HttpResponse.BodyHandlers.ofString());

错误:

没有方法签名: jdk.internal.net.http.HttpRequestBuilderImpl.PATCH() 适用于 参数类型: (jdk.internal.net.http.RequestPublishers$StringPublisher) 值: [jdk.internal.net.http.RequestPublishers$StringPublisher@280a600b]

调用本身效果很好,例如在 Postman 中。但我不能让它在 groovy/java 中工作。

我以前使用过HttpUrlConnection,但它不支持PATCH。真的可以使用HttpRequest吗?

我在网上找不到任何使用 PATCH 方法的工作示例。

【问题讨论】:

  • HttpRequest 使用Builder 构建请求对象,该对象具有有限的HTTP 请求类型集合和构建模式,您可以使用method 来支持其他请求类型。检查this

标签: java groovy httprequest java-11 java-http-client


【解决方案1】:

根据文档,您可以使用“method”指定其他类型的方法,如 PATCH、OPTIONS、TRACE 等。

在你的情况下:

HttpRequest request = HttpRequest.newBuilder()
                             .uri(URI.create(url))
                             .method("PATCH", jsonPayload)
                             .header("Content-Type", "application/json")
                             .build();

【讨论】:

  • 天啊,非常感谢!我想知道的是,为什么将 GET() 和 POST() 视为专用方法,而其他方法则不...
  • 可能是因为编写类的开发人员认为其他方法更常用。在我看来,PATCH 被遗忘了,它将在其他更新中添加。
猜你喜欢
  • 2018-12-23
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2022-10-13
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
相关资源
最近更新 更多