通过 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
,这将按预期运行。
另一种方法是使用拦截器(有一个用于基本验证的拦截器,您可以将其用作参考)。
我可以使用我的 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
,这将按预期运行。
另一种方法是使用拦截器(有一个用于基本验证的拦截器,您可以将其用作参考)。