我可以成功调用PostMan和Intellij 's built-in Rest Client using my API key. When I try to use Spring'的RestTemplate中的AirTable API,使用相同的URL和 Headers 我得到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做错了什么?
1 回答
你正在使用的
getForObject
的重载需要一个vararg对象作为最后一个参数,这些值是用于替换第一个参数的变量的值,该变量应该是URI模板 . 这意味着您正在设置的 Headers 未按照您希望的方式使用 .您应该使用正确的
exchange
重载,使用HttpEntity
,它将按预期运行 .另一个选项是,为了避免总是在请求中明确地放置auth,使用拦截器(有一个用于Basic auth的可以用作参考) .