Java 通过Spring Boot调用AirTable Rest API

Java 通过Spring Boot调用AirTable Rest API,java,spring,spring-boot,airtable,Java,Spring,Spring Boot,Airtable,我可以使用API密钥从PostMan和Intellij的内置Rest客户端成功调用API。当我尝试用相同的URL和标题使用Spring的RestTemplate时,我得到了一个401 org.springframework.web.client.HttpClientErrorException: 401 Unauthorized 我的RestTemplate代码是: RestTemplate restTemplate = new RestTemplate(); HttpHeaders head

我可以使用API密钥从PostMan和Intellij的内置Rest客户端成功调用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);
RestTemplate RestTemplate=new RestTemplate();
HttpHeaders=新的HttpHeaders();
headers.set(“授权”、“承载人”+apiKey);
HttpEntity=新的HttpEntity(“参数”,标题);
返回restemplate.getForObject(URL、String.class、entity);
通过Rest客户机(如PostMan或Intellij的内置客户机)提供完全相同的URL和标头(承载API密钥),我从AirTable获得200响应和预期数据


上面代码中RestTemplate的错误是什么?

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

相反,您应该使用正确的
交换
重载获取一个
HttpEntity
,该重载将按预期运行


另一个选项是使用拦截器(有一个用于基本身份验证的拦截器,您可以将其用作参考),以避免您总是显式地将身份验证放在请求中。

您还可以尝试在标题标题中设置内容类型。set(“content type”,“application/json”);或者尝试使用headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));使用rest模板共享日志。它将清楚地告诉您所形成的请求和实体。