FeignClient конвертирует метод GET в POST - PullRequest
0 голосов
/ 16 ноября 2018

Я не знаю, что я делаю неправильно, но каждый раз, когда симулирующий клиент конвертирует метод, объявленный как get, в тип записи.

@FeignClient(name = "my-service", url = "http://localhost:8114", path = "service")
public interface MyServiceClient {

    @RequestMapping(method = GET, value = "/clients")
    Client getClients(@QueryMap MyPojo pojo);
}

@Getter
@Setter
public class MyPojo {

    @NotNull
    private String someValue;
    @NotNull
    private SomeEnum someEnum;
}

Эта настройка должна быть разрешена для этого запроса:
GET http://localhost:8114/service/clients?someValue=foo&someEnum=bar

Но каждый раз, когда я получаю этот результат:

{
  "timestamp": 1542378765498,
  "status": 405,
  "error": "Method Not Allowed",
  "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
  "message": "Request method 'POST' not supported",
  "path": "/service/clients"
}

Однако, когда я делаю это таким образом, он прекрасно работает:

@RequestMapping(method = GET, value = "/clients?someValue=foo&someEnum=bar")
Client getClients();

Iя работаю над spring-cloud-starter-feign 1.2.7.RELASE версией, которая содержит feign-core/sl4fj/hystrix/ 9.3.1 версию, но я также проверил ее на версии 10.1.0, с тем же результатом.

Что я должен сделать, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

В моем проекте я использую spring-cloud-dependencies с Camden.SR7 версией, которая содержит 9.3.1 симулированную версию, в настоящее время самой новой версией является Finchley.RELEASE, которая содержит симуляцию 9.7, и я вижу, что она предназначена для spring-boot 2.x.x,но вся моя инфраструктура (сервер config / eureka) работает на 1.5.x, поэтому возникают следующие проблемы.Я взглянул на документацию по github для feign и обнаружил, что аннотация @Param может быть полезной, но когда я использую ее в методе с 3 аргументами, выдается исключение Method has too many Body parameters~.Наконец, аннотация @RequestParam от Spring работает как обходной путь, но я не нашел источника информации, который бы мог объединить эти аннотации.

@RequestMapping(method = GET, value = "/clients")
Client getClients(@RequestParam("someValue") String someValue, @RequestParam("someEnum") String someEnum);

Я не нашел spring-cloud-dependencies версию, которая содержит 9.7 Притворяться, и он предназначен для spring-boot 1.5.x приложений.

0 голосов
/ 16 ноября 2018

Как уже обсуждалось ЗДЕСЬ : feign 9.3.1 поддерживает @QueryMap с POJO, вам нужно использовать карту, попробуйте обновить до feign 9.7 или 10.0.1

...