Использование @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();
}