Java-Restman 405方法虽然邮递员调用有效,但不允许

时间:2019-02-08 12:16:14

标签: java rest resttemplate

使用RestTemplate时遇到奇怪的问题。我正在使用某个REST API,并且我想使用PUT更新某些内容。 因此,例如邮递员我正在发送此请求:

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

通过邮递员进行的更新成功。如果现在我通过RestTemplate在Java中执行相同的调用,则会得到405方法不允许:

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,则可以成功进行更新。我还比较了标题和所有内容。一切都等同于通过邮递员完成任务的方式。

是否有其他可能导致这种行为的原因(除了我比较愚蠢地比较标头等而缺少某些东西之外,还有其他原因)?针对此API的其他PUT,POST调用等都可以正常工作,否则我会假设我对RestTemplate

的使用存在一般性问题

2 个答案:

答案 0 :(得分:0)

代码array表示您知道针对该端点使用的HTTP动词(GET,POST,PUT等),但API不接受。

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

enter image description here

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

如果不需要,您可以始终使用405 Method Not Allowed代替RestTemplate:

HttpPut

答案 1 :(得分:0)

我遇到了同样的问题。后来我在日志中打印了请求和 URL。 我发现我使用了错误的端点。 您能否尝试打印日志中的 URL 和请求,并检查这些是否符合预期且正确?