Je ne sais pas ce que je fais mal, mais à chaque fois client Feindre méthode convertit déclaré comme get type poste.
@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;
}
Cette configuration doit être résolu à cette demande:
GET http://localhost:8114/service/clients?someValue=foo&someEnum=bar
Mais chaque fois que je suis obtenir ce résultat:
{
"timestamp": 1542378765498,
"status": 405,
"error": "Method Not Allowed",
"exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'POST' not supported",
"path": "/service/clients"
}
Cependant, il fonctionne très bien quand je le fais de cette façon:
@RequestMapping(method = GET, value = "/clients?someValue=foo&someEnum=bar")
Client getClients();
Je travaille sur la spring-cloud-starter-feign 1.2.7.RELASE
version qui contient la feign-core/sl4fj/hystrix/ 9.3.1
version, mais j'ai aussi testé sur la version 10.1.0, avec ce même résultat.
Que dois-je faire pour résoudre ce problème?
Dans mon projet , je l' utilise spring-cloud-dependencies
avec la Camden.SR7
version qui contient la 9.3.1
version feindre, à l' heure actuelle , la nouvelle version est Finchley.RELEASE
qui contient feindre 9.7
et je vois qu'il est dédié à spring-boot 2.x.x
, mais mon infrastructure entière (config / eureka serveur) fonctionne sur 1.5.x
il produit les prochains numéros. Je pris un coup d' œil à la documentation de GitHub pour feindre, et j'ai découvert l' @Param
annotation pourrait être utile, mais quand je l' utilise dans la méthode avec 3 arguments, il émet une exception Method has too many Body parameters~
. Enfin annotation @RequestParam
de printemps fonctionne comme solution, mais je ne trouve aucune source d'information que nous pouvons combiner ces annotations.
@RequestMapping(method = GET, value = "/clients")
Client getClients(@RequestParam("someValue") String someValue, @RequestParam("someEnum") String someEnum);
Je ne l' ai pas trouvé la spring-cloud-dependencies
version qui contient 9.7
feindre et il est dédié à des spring-boot 1.5.x
applications.