我正在使用 Spring Boot 编写一个与 HTTP Rest 服务器交互的应用程序。我连接的服务器之一(Wit.ai)使用承载者授权令牌。产生成功响应的卷曲请求如下所示:
GET /message?q=sample message HTTP/1.1
Host: api.wit.ai
Authorization: Bearer XXXXXXXXXXXXX
Cache-Control: no-cache
Postman-Token: 526c3a11-8e61-4552-aa19-e913f6473753
wit.ai 文档对令牌做了以下说明,
Wit.ai 使用 OAuth2 作为授权层。因此,每个 API 请求都必须包含带有令牌的 Authorize HTTP 标头
访问令牌是特定于应用程序的。
我正在尝试使用 @FeignClient 在 Spring Boot 应用程序中向此端点发送 GET 请求。但是,端点似乎不接受我的授权令牌。
这是我的 FeignClient 代码
@FeignClient(name="witGetter", url = "${wit.url}")
public interface WitGetter {
@RequestMapping(method = RequestMethod.GET, value = "/message?v=20180507q={text}",
headers = {"Authorization: Bearer XXXXXXXXXXXXX"})
WitResponse getWitResponse(@PathVariable("text") final String text);
}
传递此类授权令牌的正确方法是什么?我尝试了其他一些方法,但没有成功。感谢您的任何建议!
顺便说一句,下面的代码使用传统的 Feign 接口工作,但在这种情况下我需要使用 @FeignClient 。
public interface WitGetter {
@Headers("Authorization: Bearer XXXXXXXXXXXXX")
@RequestLine("GET /message?q={text}")
WitResponse getWitResponse(@Param("text") String text);
}
(下面的代码位于单独的配置文件中)
@Bean
public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);
}
EDIT
使用上述代码时得到的错误代码是:
线程“main”中出现异常 feign.FeignException:状态 400 读取 WitGetter#getWitResponse(String,String);内容:
{
“错误”:“错误的身份验证,检查令牌/参数”,
“代码”:“无身份验证”
}