【发布时间】:2019-02-08 12:16:14
【问题描述】:
我在使用 RestTemplate 时遇到了一个奇怪的问题。我正在使用某个 REST API,并且我想使用 PUT 更新某些内容。 因此,在例如邮递员 我正在发送这个请求:
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 并将其复制到 Postman,我可以成功更新。我还比较了标题和所有内容。一切都等同于通过 Postman 完成的方式。
这种行为是否有任何潜在的其他原因(另一个原因是我太愚蠢地比较标题等并遗漏了一些东西)?针对此 API 的其他 PUT、POST 调用等工作正常,否则我会假设我使用 RestTemplate 时存在一般问题
【问题讨论】:
-
在新的 RestTemplate(...) 调用之前添加一个 logging/System.out 并输出生成的 URL。您确定动态生成的 URL 与您使用 postman 测试的 URL 完全相同吗?
-
是的,我就是这么做的。我将 URL 从那里复制到 Postman,并使用它在 Postman 中工作的完全相同的 URL
-
您能出示您的 API 代码吗?
标签: java rest resttemplate