通过 Spring 启动返回 401 调用 AirTable Rest API

Calling AirTable Rest API via Spring Boot returning 401

我可以使用我的 API 密钥从 PostMan 和 Intellij 的 built-in Rest 客户端成功调用 AirTable API。当我尝试将 Spring 的 RestTemplate 与相同的 URL 和 header 一起使用时,我得到一个 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 和 header(Bearer API 密钥),我得到 200 响应和预期数据从 AirTable 回来。

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

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

您应该改用正确的 exchange 重载 HttpEntity,这将按预期运行。

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