Использование @RequestLine с помощью Feign

у меня есть рабочий интерфейс симуляции, определенный как:

@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.ленг.IllegalStateException: метод getLinksForTrack не аннотируется типом метода HTTP (ex. GET, POST)

любые идеи, почему?

2 ответов


Я бы не ожидал, что это сработает.

@RequestLine является основной аннотацией, но вы используете Spring Cloud @FeignClient который использует аннотации Spring MVC.


Весна создала свое собственное притворство Contract чтобы вы могли использовать Spring's @RequestMapping аннотации вместо подделок. Вы можете отключить это поведение включая Боб типа feign.Contract.Default в контексте вашего приложения.

если вы используете spring-boot (или что-нибудь, использующее Java config), включая это в @Configuration класс должен повторно включить аннотации Feign:

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