Spring Boot调用Strava API返回401 Unauthorized错误如何解决
Strava API Spring Boot集成401错误问题及解决方案
前置开发说明
正在开发首个调用Strava API的Java Spring Boot应用,目标是获取指定时段内的个人活动数据,已完成如下前置操作:
- 在Strava官网注册应用,获取了client_id和client secret
- 生成spring-swagger-codegen-api-client并将客户端自动注入到应用中
初始配置类代码如下:
@Configuration public class StravaIntegrationConfiguration { @Bean public ActivitiesApi stravaApi(){ return new ActivitiesApi(apiClient()); } @Bean public ApiClient apiClient(){ ApiClient apiClient = new ApiClient(); OAuth strava_oauth = (OAuth) apiClient.getAuthentication("strava_oauth"); strava_oauth.setAccessToken("X"); return new ApiClient(); } }
业务调用类代码如下:
@Component public class Adapter { @Autowired private ActivitiesApi activitiesApi; public void getActivities(Integer before, Integer after, Integer page, Integer perPage) { final List<SummaryActivity> loggedInAthleteActivities = activitiesApi.getLoggedInAthleteActivities(before, after, page, perPage); System.out.println("All activities from ___ to ___"+ loggedInAthleteActivities.size()); } }
问题现象
已确认使用的access_token有效,使用该令牌在Postman中发送请求可正常返回结果,但调用getLoggedInAthleteActivities方法时返回401 Unauthorized错误,错误详情如下:
[{"message":"Authorization Error","errors":[{"resource":"Athlete","field":"access_token","code":"invalid"}]}]
尝试将scope修改为activity:read或者activity:read_all,问题没有解决。
问题根源
问题和Strava API本身无关,是apiClient配置存在错误:完成认证配置后,返回了新的未配置的ApiClient实例,之前的access_token配置完全未生效。错误代码行如下:
// 省略前面的配置逻辑 return new ApiClient();
修复方案
修改配置类中ApiClient的返回逻辑,返回已经完成配置的apiClient实例即可,正确代码如下:
@Bean public ApiClient apiClient(){ ApiClient apiClient = new ApiClient(); OAuth strava_oauth = (OAuth) apiClient.getAuthentication("strava_oauth"); strava_oauth.setAccessToken("X"); // 返回已完成配置的实例,而非新建的空实例 return apiClient; }
修复后重启应用即可正常调用接口获取活动数据,401错误会消失。
内容的提问来源于stack exchange,提问作者Anna Bar
相关产品推荐
相关产品推荐

