在Feign中使用@RequestLine

nic*_*esh 12 java netflix-feign

我有一个工作的Feign接口定义为:

@FeignClient("content-link-service")
public interface ContentLinkServiceClient {

    @RequestMapping(method = RequestMethod.GET, value = "/{trackid}/links")
    List<Link> getLinksForTrack(@PathVariable("trackid") Long trackId);

}
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为使用@RequestLine

@FeignClient("content-link-service")
public interface ContentLinkServiceClient {

    @RequestLine("GET /{trackid}/links")
    List<Link> getLinksForTrack(@Param("trackid") Long trackId);

}
Run Code Online (Sandbox Code Playgroud)

我得到了例外

引起:java.lang.IllegalStateException:方法getLinksForTrack没有使用HTTP方法类型注释(例如GET,POST)

有什么想法吗?

Ale*_*tig 22

我不希望这个工作.

@RequestLine是一个核心Feign注释,但您使用的@FeignClient是使用Spring MVC注释的Spring Cloud .


Mic*_*l K 10

Spring创建了自己的Feign Contract,允许你使用Spring的@RequestMapping注释而不是Feigns.您可以通过在应用程序上下文中包含类型的beanfeign.Contract.Default来禁用此行为.

如果你正在使用spring-boot(或使用Java配置的任何东西),在@Configuration类中包括这个应该重新启用Feign的注释:

@Bean
public Contract useFeignAnnotations() {
    return new Contract.Default();
}
Run Code Online (Sandbox Code Playgroud)

  • 我们应该在代码中的哪个位置调用 useFeignAnnotations()。或者是否有一个内部 bean 可以读取 useFeignAnnotations() ?我遇到了这个问题,并在我的配置中添加了 bean,但正如预期的那样,它什么也没做 (2认同)