0

我创建了Feign Client

@FeignClient(name = "yandex",url="${yandex.ribbon.listOfServers}")
public interface YandexMapsRestApiServiceClient {
    @RequestMapping(method = RequestMethod.GET, value = "{geoParam}")
    String  getCountryInfo(@Param("geoParam") String geoParam);
}

在控制器中,我被写到:

@Autowired
private YandexMapsRestApiServiceClient client;

@RequestMapping(value = "/", method = RequestMethod.GET)
public String test() {
   return  client.getCountryInfo("Moscow");
}

Applicaton.yml这样看:

yandex:
  ribbon:
    listOfServers: https://geocode-maps.yandex.ru/1.x/?format=json&geocode=
    ConnectTimeout: 20000
    ReadTimeout: 20000
    IsSecure: true
hystrix.command.default.execution:
  timeout.enabled: true
  isolation.thread.timeoutInMilliseconds: 50000

当我尝试获得一些结果时,作为回报,我得到 404 错误:

feign.FeignException: status 404 reading YandexMapsRestApiServiceClient#getCountryInfo(String); content:

在这种情况下,我在调试器中看到他feign没有设置我的geoParam

在此处输入图像描述

为什么会发生这种情况以及如何解决这个问题?

4

1 回答 1

1

正如Musaddique所说,您正在混合FeignSpring注释。使用Spring Cloud Feign(OpenFeign) 时,必须使用 Spring 注解RequestParamFeign不会处理注释。

更新

要实现您的目标,您需要更改配置。ofurl应该只是一个 url 或服务名称。对 url 使用查询字符串或其他扩展会产生意想不到的结果。

将路径信息移动到RequestMapping注释并在那里指定查询参数。

@FeignClient(name = "yandex", url="${yandex.ribbon.listOfServers}")
public interface YandexMapsRestApiServiceClient {

    @RequestMapping(method = RequestMethod.GET, value = "/1.x?format=json&geocode={geoParam}")
    String getCountryInfo(@RequestParam("geoParam") String geoParam);
}

您的功能区配置如下所示:

yandex:
  ribbon:
     listOfServers: "https://geocode-maps.yandex.ru"
     ConnectTimeout: 20000
     ReadTimeout: 20000
     IsSecure: true

现在,使用您的示例client.getCountryInfo("moscow")将产生https://geocode-maps.yandex.ru/1.x?format=json&geocode=moscow.

于 2018-04-30T17:14:33.760 回答