使用 restTemplate 发送带有身份验证标头的 GET 请求

2022-08-31 10:22:54

我需要通过使用 RestTemplate 发送带有一些授权标头的 GET 请求来从服务器检索资源。

在浏览了文档之后,我注意到没有一个GET方法接受标头作为参数,并且发送标头(如接受和授权)的唯一方法是使用交换方法。

由于这是一个非常基本的动作,我想知道我是否错过了什么,还有另一种更简单的方法可以做到这一点?


答案 1

你没有错过任何东西。 是用于设置请求标头的适当方法。RestTemplate#exchange(..)

下面是一个示例(使用 POST,但只需将其更改为 GET 并使用所需的实体)。

这是另一个示例。

请注意,使用GET,您的请求实体不必包含任何内容(除非您的API期望它,但这将与HTTP规范背道而驰)。它可以是空字符串。


答案 2

可以与 一起使用。它看起来像这样:postForObjectHttpEntity

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer "+accessToken);

HttpEntity<String> entity = new HttpEntity<String>(requestJson,headers);
String result = restTemplate.postForObject(url, entity, String.class);

在 GET 请求中,您通常不会发送正文(这是允许的,但它没有任何用途)。在不以不同的方式连接 RestTemplate 的情况下添加标头的方法是直接使用 or 方法。获取速记不支持标头修改。exchangeexecute

乍一看,这种不对称性有点奇怪,也许这将在Spring的未来版本中得到解决。


推荐