【问题标题】:GET turning into POST with Spring Feign使用 Spring Feign 将 GET 转换为 POST
【发布时间】:2019-08-20 17:10:14
【问题描述】:

我遇到了一个问题,即我的 GET 请求被更改为 POST,因为 RequestHeader 和 PathVariable 在 Feign Client 中被解释为请求的正文。

拦截器

public class OpenFeignConfiguration implements RequestInterceptor {
    @Value("${key:}")
    private String key;

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

    @Override
    public void apply(RequestTemplate template) {
        template.header("key", key);
    }
}

还有 Feign 客户端

@FeignClient(name = "feignClient", url = "${client.url}", configuration = OpenFeignConfiguration.class)
public interface FeignClient {
    @GetMapping(value = "/path/?test=({var1} and {var2})")
    public Object test(String body, @PathVariable("var1") String var1, @PathVariable("var2") String var2);
}

【问题讨论】:

    标签: spring spring-boot spring-cloud spring-cloud-feign


    【解决方案1】:

    我找到的解决方案是您必须将 Springs Feign 合同更改为 Feign 一个:

    public class OpenFeignConfiguration implements RequestInterceptor {
       @Value("${key:}")
       private String key;
    
       @Bean
       Logger.Level feignLoggerLevel() {
           return Logger.Level.FULL;
       }
    
       @Bean
       public Contract feignContract() {
           return new Contract.Default();
       }
    
       @Override
       public void apply(RequestTemplate template) {
           template.header("key", key);
       }
    }
    

    而客户端现在必须使用 Feign 注解:

    @FeignClient(name = "feignClient", url = "${client.url}", configuration = OpenFeignConfiguration.class)
    public interface FeignClient {
        @RequestLine("GET /path/?test=({var1} and {var2})")
        public Object test(@Param("var1") String originator, @Param("var2") String receiver);
    }
    

    希望对遇到与我相同问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2020-06-21
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多