2015-05-01 3 views
4

Я рабочий Feign интерфейс определяется как:Использование @RequestLine с симулировать

@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); 

} 

Я получаю исключение

Причиненный by: java.lang.IllegalStateException: метод getLinksForTrack не аннотируется с типом метода HTTP (например, GET, POST)

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

ответ

8

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

@RequestLine - это ключевое примечание с надписью Feign, но вы используете Spring Cloud @FeignClient, который использует аннотации Spring MVC.

2

Spring создал свой собственный Feign Contract, чтобы вы могли использовать аннотации весны вместо Feigns. Вы можете отключить это поведение including a bean of type feign.Contract.Default in your application context.

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

@Bean 
public Contract useFeignAnnotations() { 
    return new Contract.Default(); 
} 
Смежные вопросы