java - 在feign客户端拦截器中获取请求url

标签 java spring spring-boot spring-cloud-feign feign

我正在使用 spring feign 客户端来发出 http 请求。

Fiegn配置类

DefaultConfig.class
public class DefaultConfig {

    @Bean
    public OkHttpClient client() {
        return new OkHttpClient();
    }

    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

    @Bean
    public Decoder feignDecoder() {
        return new JacksonDecoder();
    }

    @Bean
    public Encoder feignEncoder() {
        return new JacksonEncoder();
    }
    @Bean
    public RequestInterceptor requestInterceptor() {
        return template -> {
            template.header(Authorization, apiKey);
        };
    }
}

我的客户端界面:

@FeignClient(name = "default", url = "${base-url}",
        configuration = DefaultConfig.class)
public interface {

    @PostMapping(value = "/users/")
   Response createUser(@RequestBody Map<String, ?> requestBody);

    @GetMapping(value = "/users/{id}")
   Response getUserDetails(@PathVariable String id);
    

}

现在的问题是我需要对 GET 和 POST 请求使用不同的授权 key 。在配置类中,我需要通过调用的 url 来区分请求。我们如何获取请求者拦截器的 url 或任何其他可以实现此目的的方法。我们可以为此创建单独的拦截器,但我尝试对这两种情况使用相同的拦截器。

最佳答案

您需要的一切似乎都在模板对象中。

@Bean
public RequestInterceptor requestInterceptor() {
    return template -> {
        if ("GET".equals(template.method()) {
            template.header(Authorization, apiKey);
        } else {
            template.header(Authorization, differentApiKey);
        }
    };
}

关于java - 在feign客户端拦截器中获取请求url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66983196/

相关文章:

java - 如何在 gradle 中设置库构建顺序?

java - 末尾带有数字的字符串迭代(初学者)

java - 在服务器端验证文件

java - Spring OAuth2 资源仅允许客户端和 token 自动创建

java - 如何将 JVM 选项添加到由 mvn spring-boot :run 启动的程序

java - 为什么@Cacheable内部的条件没有任何影响?

java - 创建和维护多个密码

java - 在共享路径中查找可用的java版本的jdk

java - 将带有嵌套字符的字符串转换为java中特定的json格式

java - 如何在 Spring Boot 2 应用程序中设置 Tomcat unloadDelay?