gpt4 book ai didi

Java - 尽管 Postman 调用有效,但不允许使用 RestTemplate 405 方法

转载 作者:行者123 更新时间:2023-11-30 10:06:35 25 4
gpt4 key购买 nike

我在使用 RestTemplate 时遇到了一个奇怪的问题。我正在使用某个 REST API,我想使用 PUT 更新一些东西。因此,例如 postman 我正在发送此请求:

PUT http://fake/foobar/c/123 with a certain body

这次通过 Postman 更新成功。如果我现在通过 RestTemplate 在 Java 中执行相同的调用,我将收到 405 Method Not Allowed:

HttpHeaders headers = createHeader();
HttpEntity<Offer> httpEntity = new HttpEntity<>(bodyEntity, headers);
String url = "http://fake/foobar/c/123"; //Created dynamically, but here pasted for sake of simplicity
RestTemplate restTemplate = new RestTemplate(...);
ResponseEntity<OfferResponse> response = restTemplate.exchange(url, HttpMethod.PUT, httpEntity, OfferResponse.class);
...

我一次又一次地比较了 URL。如果我复制控制台中登录的URL并将其复制到Postman,我可以成功进行更新。我还比较了标题和所有内容。一切都等同于如何通过 Postman 完成。

这种行为是否有任何其他潜在原因(另一个原因是我太愚蠢地比较标题等而遗漏了一些东西)?针对此 API 的其他 PUT、POST 调用等工作正常,否则我会认为我对 RestTemplate

的使用存在一般问题

最佳答案

代码 405 Method Not Allowed 表示您针对此端点使用的 HTTP 动词(GET、POST、PUT 等)已知但未被 API 接受。

如果您不能按照@Dinesh Singh Shekhawat 的建议发布 API 的详细信息,我将首先尝试使用 Postman Code 功能并获取自动生成的请求代码(OkHTTP 或 UniRest)。您可以在发送 按钮下方的右侧找到此选项。复制此代码并尝试执行请求。

enter image description here

然后将此请求与您的请求进行比较。

如果不是必需的,您始终可以使用 HttpPut 而不是 RestTemplate:

HttpClient client = HttpClientBuilder.create().build();
String url = "http://fake/foobar/c/123";

HttpHeaders headers = createHeader();
HttpEntity<Offer> httpEntity = new HttpEntity<>(bodyEntity, headers);
HttpPut httpPut = new HttpPut(url);
httpPut.setEntity(httpEntity);

HttpResponse response = client.execute(httpPut);

关于Java - 尽管 Postman 调用有效,但不允许使用 RestTemplate 405 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54592291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com