Вызов AirTable Rest API через Spring Boot, возвращающий 401
Я могу успешно вызывать AirTable API как из PostMan, так и из встроенного в Intellij Rest Client, используя мой ключ API. Когда я пытаюсь использовать RestTemplate Spring с тем же URL и заголовками, я получаю 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);
Предоставляя точно такой же URL и заголовок (ключ API Bearer) через Rest-клиенты, такие как PostMan или встроенный клиент Intellij, я получаю ответ 200 и ожидаемые данные обратно из AirTable.
Что я делаю не так с RestTemplate в коде выше?
1 ответ
Перегрузка getForObject
вы используете принимает в качестве последнего аргумента переменное объекта, являющееся значениями, используемыми для подстановки в переменные первого аргумента, который должен быть шаблоном URI. Это означает, что заданный вами заголовок не используется так, как вы хотите, чтобы он использовался.
Вместо этого вы должны использовать правильный exchange
перегрузка HttpEntity
, который будет вести себя как ожидалось.
Другой вариант, чтобы избавить вас от необходимости всегда явно указывать аутентификацию в запросе, - использовать перехватчик (есть один для базовой аутентификации, который вы можете использовать в качестве ссылки).