【问题标题】:Java - RestTemplate 405 Method Not Allowed Although Postman Call WorksJava - 尽管邮递员调用有效,但不允许使用 RestTemplate 405 方法
【发布时间】: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


【解决方案1】:

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

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

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

如果不是必需的,您可以随时使用 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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2019-07-18
      • 2015-11-09
      • 2011-09-01
      • 2012-06-29
      • 2013-03-13
      • 2016-03-08
      相关资源
      最近更新 更多