Dans cette section, nous explorerons comment construire des demandes multi-paramètres en utilisant Feign. L'auteur utilise les demandes de Get et Post Methods comme exemples à expliquer. Les principes de demande d'autres méthodes (tels que la suppression, le put, etc.) sont les mêmes, et les lecteurs peuvent les étudier eux-mêmes.
Obtenir l'URL de demande de plusieurs paramètres
Supposons que l'URL que nous demandons contient plusieurs paramètres, tels que http: // microservice-provider-user / get? Id = 1 & username = zhang san, comment le construire?
Nous savons que Spring Cloud a ajouté le support d'annotation Spring MVC pour feindre, donc nous pourrions aussi bien l'essayer selon la méthode d'écriture de Spring MVC:
@FeignClient ("MicroService-Provider-User") Interface publique UserFeignClient {@RequestMapping (Value = "/ Get", Method = requestMethod.get) Utilisateur public Get0 (utilisateur utilisateur);}Cependant, cette méthode d'écriture n'est pas correcte et la console sortira une exception similaire à ce qui suit.
feign.feigNException: statut 405 Reading userFeignClient # get0 (utilisateur); contenu:
{"Timestamp": 1482676142940, "Status": 405, "Erreur": "Méthode non autorisée", "Exception": "Org.SpringFramework.web.httprequestMethodNotsupporTedexception", "Message": "Demande Méthode 'Post' Not SupportEd", "Path": "/ Get"}
À partir de l'exception, nous pouvons voir que bien que nous spécifions la méthode GET, Feign utilisera toujours la méthode Post pour envoyer la demande.
La bonne façon de l'écrire est la suivante:
(1) Méthode 1
@FeignClient (name = "MicroService-Provider-User") Interface publique UserFeignClient {@RequestMapping (value = "/ get", méthode = requestMethod.get) utilisateur public get1 (@RequestParam ("id") Long ID, @RequestParam ("username") String Name);}C'est le moyen le plus intuitif. L'URL a plusieurs paramètres et les méthodes de l'interface FEIGN ont plusieurs paramètres. Utilisez l'annotation @RequestParam pour spécifier les paramètres demandés.
(2) Méthode 2
Les URL multi-paramètres peuvent également être construites à l'aide de la carte. Lorsqu'il existe de nombreux paramètres d'URL cibles, cette méthode peut être utilisée pour simplifier l'écriture de l'interface FEIGN.
@FeIgnClient (name = "MicroService-Provider-User") Interface publique UserFeignClient {@RequestMapping (value = "/ get", méthode = requestMethod.get) Utilisateur public Get2 (@RequestParam Map <String, objet> map);}Lorsque vous appelez, vous pouvez utiliser du code similaire à ce qui suit.
Utilisateur public GET (String Username, String Motword) {HashMap <String, Object> Map = Maps.NewHashMap (); map.put ("id", "1"); map.put ("nom d'utilisateur", "Zhang San"); retourner this.userFeignClient.get2 (map);} La demande de poste contient plusieurs paramètres
Discutons de la façon de construire une demande post contenant plusieurs paramètres à l'aide de feign. Supposons que le contrôleur du fournisseur de services soit écrit comme ceci:
@RestControllerPublic Class UserController {@postmapping ("/ post") Public User Post (@Requestbody User utilisateur) {...}}Comment utilisons-nous Feign pour demander? La réponse est très simple, exemple:
@FeignClient (name = "MicroService-Provider-User") Interface publique UserFeignClient {@RequestMapping (Value = "/ Post", méthode = requestMethod.Post) Public User Post (@Requestbody User utilisateur);} CONSEILS
(1) Pour plus de détails, veuillez consulter le projet Microservice-Provider-User-Multiple-Params et le projet de microservice-consommateur-film-Feign-Multiple-Params dans le code d'accompagnement de ce livre.
(2) En plus des méthodes expliquées dans cette section, nous pouvons également écrire notre propre encodeur pour construire des demandes multi-paramètres, mais cette méthode a un coût d'encodage plus élevé et une réutilisabilité du code plus faible. Par conséquent, ce livre ne sera pas répété.
Lecture prolongée
(1) J'espère que Feign peut prendre en charge les demandes de paramètres pour utiliser le numéro de Pojo: https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) Problème recommandé d'utiliser des annotations natives Feign: https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) Il est recommandé d'améliorer la fonctionnalité de Feign: https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) Il est recommandé de prendre en charge le corps de demande facultatif (actuellement, Feign rapportera une exception lors de la publication d'un NULL): https://github.com/spring-cloud/spring-cloud-netflix/issues/1047
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.