小编Tre*_*ien的帖子

如何使用Spring Boot和@FeignClient发送Bearer授权令牌

我使用Spring Boot编写一个与HTTP rest服务器交互的应用程序.我正在连接的服务器之一(Wit.ai)使用beaerer授权令牌.产生成功响应的curl请求如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

传递此类授权令牌的正确方法是什么?我尝试过其他一些东西,但无济于事.谢谢你的建议!

顺便说一下,下面的代码使用传统的Feign接口,但在这种情况下我需要使用@FeignClient.

public interface WitGetter {
    @Headers("Authorization: Bearer XXXXXXXXXXXXX")
    @RequestLine("GET /message?q={text}")
    WitResponse getWitResponse(@Param("text") String text);
}
Run Code Online (Sandbox Code Playgroud)

(以下代码位于单独的配置文件中)

@Bean
    public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
        return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);
Run Code Online (Sandbox Code Playgroud)

}

编辑

我使用上面代码时得到的错误代码是:

线程"main"中的异常feign.FeignException:status 400读取WitGetter #getWitResponse(String,String); …

rest spring spring-boot wit.ai feign

5
推荐指数
1
解决办法
8148
查看次数

标签 统计

feign ×1

rest ×1

spring ×1

spring-boot ×1

wit.ai ×1