Récemment, les gens demandent souvent à Spring Cloud feign comment télécharger des fichiers. Il y a de nouveaux membres de l'équipe et des frères d'autres sociétés. Cet article le résume brièvement -
Au début du printemps, Feign lui-même n'avait pas la possibilité de télécharger des fichiers (il y a 1 an). Pour y parvenir, vous devez rédiger l'encodeur par vous-même pour implémenter le téléchargement. Maintenant, nous sommes beaucoup plus heureux. Étant donné que Feign Officiel fournit le sous-projet Feign-Form, qui implémente le codeur requis pour le téléchargement.
Remarque: La version que j'ai testée est Edgware.release. Camden et Dalston s'adaptent également à la description de cet article.
Ajouter une dépendance
<dependency> <proupId> io.github.openfeign.form </rompuprid> <letifactive> feign-forwing </ artifactid> <version> 3.0.3 </-version> </dependency> <dependency> <proupId> io.github.openfeign.form </proupId> <Artifactid> feign-formit <version> 3.0.3 </ version> </ dépendance>
Rédaction du client Feign
@FeignClient (name = "ms-content-échantillon", configuration = uploadFeignClient.MultupartsupportConfig.class) Interface publique uploadFeignClient {@RequestMapping (value = "/ upload" MediaType.multiparpart_form_data_value) @ResponseBody String HandleFileUpload (@RequestPart (value = "file") Fichier multipartFile); classe multipartsupportConfig {@Bean public Encoder feIgnForsecoder () {return new SpringForseCcoder (); }}}Comme le montre le code, dans ce client Feign, nous référons la classe de configuration MultipartsupportConfig, et dans MultipartsupportConfig, nous instancons SpringFOreCcoder. De cette façon, le client Feign peut être téléchargé.
Note
@RequestMapping (value = "/ upload", méthode = requestMethod.post, produit = {mediatype.application_json_utf8_value}, consommateur = mediatype.multiparpart_form_data_value) ne doit pas manquer;L'annotation @RequestPart (valeur = "fichier") dans la définition de l'interface ne peut pas être écrite comme @RequestParam (value = "fichier".
Il est préférable de définir le délai d'expiration d'Hystrix un peu plus longtemps, tel que 5 secondes, sinon Hystrix peut être sorti avant le téléchargement du fichier, ce qui entraîne une erreur du côté client.
Les pièges de l'utilisation de feign dans SpringCloud
Les exemples sont les suivants:
@FeignClient ("Service-Resource") // @ requestmapping ("/ api / test") interface publique testResourceitg {@RequestMapping (value = "/ api / test / brut", méthode = requersMeth.Post, consommateurs = "application / x-www-form-urlencoded") String public brute1 (@pathvarable ("sujet") @RequestParam ("Content") String Content); // Contenu} illustrer:
* Utiliser la consommation dans la mise à pied de demande pour spécifier le type de contenu de la demande générée
* Les paramètres spécifiés par RequestParam seront épissés après l'URL, tels que:? Name = xxx & Age = 18
* Les paramètres Pathvariables sont envoyés à un liendhashmap <String ,?> dans le codeur feign pour le traitement. L'encodeur qui implémente cette interface au printemps est SpringEncoder, et cette implémentation utilisera le HTTPMessageConverter au printemps pour écrire le corps de la demande.
fosse:
* N'utilisez pas de demande de demande sur le nom de la classe d'interface. Bien qu'il puisse être utilisé, SpringMVC ouvrira l'instance de l'interface en tant que contrôleur. Cela peut être consulté dans le journal de mappage de démarrage.
* Utilisez le SpringEncoder par défaut, lorsque la consommation n'est pas spécifiée, les paramètres de PathVariable généreront des chaînes JSON à envoyer, et la méthode de génération de formulaire n'est pas prise en charge par défaut. La raison en est que FormHttpMessageConverter ne peut gérer que le multivalemap, tandis que l'utilisation de paramètres Pathvariable est placée dans HashMap. Le téléchargement de fichiers n'est pas pris en charge par défaut. En fait, il existe déjà un HTTPMessageConverter qui prend en charge la gestion de diverses situations.
Remplissez la fosse:
* Support Form Form Soumission: il vous suffit d'écrire un FormHttpMessageConverter qui prend en charge la carte. Vous pouvez appeler la méthode de FormHttpMessageConverter en interne pour simplifier les opérations.
* Prise en charge du téléchargement du fichier: résumez simplement le fichier à télécharger dans une ressource (la ressource doit implémenter l'interface de nom de fichier, qui est l'identifiant de l'analyse des paramètres de demande dans un fichier), et utilisez la ressourcehttpMessageConverter par défaut pour traiter.
* Prise en charge de la gestion des paramètres multipartfile: écrivez simplement un multipartFileHttpMessageConverter qui prend en charge le multipartfile. Vous pouvez appeler ResourceHttpMessageConverter implémentation en interne. Dans le même temps, veuillez noter qu'il doit être ajouté aux parties de FormHttpMessageConverter et réécrire la méthode GetFileName de FormHttpMessageConverter pour prendre en charge l'obtention de nom de fichier à partir de multipartfile.
* Tous les HttpMessageConverter peuvent être générés directement en mode @Bean, et Spring reconnaîtra automatiquement et ajoutera
Prise en charge parfaite pour le formulaire et le téléchargement de fichiers:
Plan 1:
Utilisez MapFormHttpMessageConverter.Java et MultipartFileHttpMessageConverter.Java dans les pièces jointes
Faire la configuration suivante au printemps
@BeanPublic MapFormHTTPMessageConverter MapFormHTTPMessageConverter (MultipartFileHttpMessageConverter MultipartFileHttpMessageConverter) {MapFormHttpMessageConverter MapFormHttpMessageConverter = new MapFormHttpMessagConverter (); mapformHttpMessageConverter.addPartConverter (multipartFileHttpMessageConverter); return mapformhttpMessageConverter;} @ beanpublic multipartFileHttpMessageConverter multipartFileHttpMessageConverter () {return new multipartFileHttPMessageConverter ();} Plan 2:
Utilisation de feignspringformencoder.java
Au printemps, configurez-le comme suit:
@BeanPublic Encoder feignencoder (objectFactory <httpMessageConverters> MessageConverters) {return new feignspringForseCcoder (MessageConverters);} Plan d'utilisation recommandé 1
Le plan 2 est pour référence https://github.com/pcan/feign-lient-test, non testé
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.