0

我可以使用我的 API 密钥从 PostMan 和 Intellij 的内置 Rest Client成功调用AirTable API。当我尝试使用具有相同 URL 和标头的 Spring 的 RestTemplate 时,我得到 401

org.springframework.web.client.HttpClientErrorException: 401 Unauthorized

我的 RestTemplate 代码是:

RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + apiKey);
HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
return restTemplate.getForObject(URL, String.class, entity);

通过 Rest 客户端(例如 PostMan 或 Intellij 的内置客户端)提供完全相同的 URL 和标头(Bearer API 密钥),我得到了 200 响应和来自 AirTable 的预期数据。

我在上面的代码中对 RestTemplate 做错了什么?

4

1 回答 1

1

您正在使用的重载getForObject将对象的可变参数作为最后一个参数,这些参数是用于替换第一个参数的变量的值,它应该是 URI 模板。这意味着您设置的标头未按照您希望的方式使用。

您应该改为使用正确的exchange重载HttpEntity,它会按预期运行。

另一种选择是使用拦截器(有一个用于基本身份验证的拦截器,您可以将其用作参考)。

于 2018-10-27T21:08:12.913 回答