使用@RequestLine与假装

2022-09-02 02:43:53

我有一个工作假装界面,定义为:

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

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

}

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

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

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

}

我遇到异常

原因:java.lang.IllegalStateException: Method getLinksForTrack 未使用 HTTP 方法类型(例如 GET、POST)进行注释

任何想法为什么?


答案 1

我不指望这能奏效。

@RequestLine是一个核心的假装注释,但您正在使用使用Spring MVC注释的Spring Cloud。@FeignClient


答案 2

Spring创建了自己的Fein,允许您使用Spring的注释而不是Feins。您可以通过包含假冒类型的 Bean 来禁用此行为。协定。应用程序上下文中的默认Contract@RequestMapping

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

@Bean
public Contract useFeignAnnotations() {
    return new Contract.Default();
}

推荐