Вызов 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, который будет вести себя как ожидалось.

Другой вариант, чтобы избавить вас от необходимости всегда явно указывать аутентификацию в запросе, - использовать перехватчик (есть один для базовой аутентификации, который вы можете использовать в качестве ссылки).

Другие вопросы по тегам