Recientemente, la gente a menudo pregunta a Spring Cloud Feign Cómo cargar archivos. Hay nuevos miembros del equipo y hermanos de otras compañías. Este artículo lo resume brevemente -
A principios de la nube de primavera, Feign en sí no tenía la capacidad de cargar archivos (hace 1 año). Para lograr esto, debe escribir codificador usted mismo para implementar la carga. Ahora estamos mucho más felices. Debido a que Feign Official proporciona la forma de fingir subproyecto, que implementa el codificador requerido para cargar.
Nota: La versión que probé es edgware.release. Camden y Dalston también se adaptan a la descripción en este artículo.
Agregar dependencia
<Spendency> <MoupRoD> io.github.openfeign.form </groupid> <artifactId> Feign-forma </artifactId> <versión> 3.0.3 </versión> </pendency> <sependency> <MoupRoMid> io.github.openfeign.form </groupId> <AtifactId> feign-formatring </artifactid> <Versión> 3.0.3 </Versión> </pendency>
Escribir Cliente Feign Feign
@FeignClient (name = "MS-Content-Sample", Configuration = uploadfeignClient.MultipartSupportConfig.class) Interfaz pública uploadFeignClient {@RequestMapping (value = "/upload", método = requestmethod.post, produce = {mediatype.application_json_utf8_value}, consumer = Mediatype.multipart_form_data_value) @ResponseBody String handleFileUpload (@RequestPart (value = "archivo") archivo multipartfile); clase multipartSupportConfig {@Bean public Coder FeignFormEncoder () {return new SpringFormEncoder (); }}}Como muestra el código, en este cliente Feign, hacemos referencia a la clase de configuración multipartsupportconfig, y en multipartsupportconfig, instanciamos SpringFormEncoder. De esta manera, se puede cargar el cliente Feign.
Nota
@RequestMapping (value = "/upload", método = requestmethod.post, produce = {mediatype.application_json_utf8_value}, consumidor = mediatype.multipart_form_data_value) no debe faltar;La anotación @RequestPart (valor = "archivo") en la definición de interfaz no puede escribirse como @RequestParam (value = "archivo".
Es mejor establecer el tiempo de espera de Hystrix un poco más, como 5 segundos, de lo contrario, Hystrix puede tiempo antes de que se cargue el archivo, lo que resulta en un error en el lado del cliente.
Las trampas de usar Feign en SpringCloud
Los ejemplos son los siguientes:
@FeignClient ("Service-DeSource") //@requestmapping ("/api/test") interfaz pública testresourceitg {@RequestMapping (valor = "/api/test/raw", método = requestmethod.post, consumo = "aplicación/x-wwww-form-urlCoded") public string raw1 (@pathvariable ("seno") string string string string string string, /////////////////titenTorlingeDed ") public string raw1 (@pathvariable (" seno "). @RequestParam ("Content") String Content); // Contenido} ilustrar:
* Utilice los consumos en SolicHmapping para especificar el tipo de contenido de la solicitud generada
*Los parámetros especificados por requestparam se empallarán después de la URL, como:? Name = xxx & Age = 18
*Los parámetros PathVariables se envían a un Linkedhashmap <String,?> En el codificador FINE para procesar. El codificador que implementa esta interfaz en Spring es SpringEncoder, y esta implementación utilizará el httpmessageConverter en la primavera para escribir el cuerpo de solicitud.
Fosa:
*No use SolicMapping en el nombre de la clase de interfaz. Aunque se puede usar, SpringMVC abrirá la instancia de la interfaz como controlador. Esto se puede ver en el registro de mapeo de inicio.
*Use el SpringEncoder predeterminado, cuando no se especifique el consumo, los parámetros en PathVariables generarán cadenas JSON para enviar, y el método de generación de formulario de formulario no es compatible de forma predeterminada. La razón es que FormhttpMessageConverter solo puede manejar multivaluMap, mientras que el uso de parámetros PathVariables se coloca en HashMap. La carga de archivo no es compatible de forma predeterminada. De hecho, ya hay un httpmessageConverter que admite el manejo de diversas situaciones.
Complete el pozo:
*Envío del formulario de soporte: solo necesita escribir un formhttpmessageConverter que admite el mapa. Puede llamar al método de formhttpMessageConverter internamente para simplificar las operaciones.
*Soporte de la carga del archivo: simplemente encapsule el archivo que se cargará en un recurso (el recurso debe implementar la interfaz del nombre de archivo, que es el identificador de analizar los parámetros de solicitud en un archivo) y usar el recurso predeterminado de recursos de AgumessageConver para procesar.
*Soporte para manejar los parámetros de los archivos multiparte: simplemente escriba un multipartfilehttpmessageConverter que admite elfile multipart. Puede llamar a la implementación de ResourceHttpMessageConverter internamente. Al mismo tiempo, tenga en cuenta que debe agregarse a las partes de FormhttpMessageConverter, y reescribir el método getFilename de FormhttpMessageConverter para admitir la obtención del nombre de archivo de MultipartFile.
*Todos los httpmessageConverter se pueden generar directamente en el modo @Bean, y Spring reconocerá y agregará automáticamente
Soporte perfecto para la carga y la carga de archivos:
Plan 1:
Use mapformhttpmessageConverter.java y multipartfilehttpmessageConverter.java en archivos adjuntos
Hacer la siguiente configuración en primavera
@BeanPublic MAPFORMHTTPMESSAGECONVERTER MAPFORMHTTPMESSAGECONVERTER (multipartfileHtttpMessageConverter multipartfileHttpMessageConverter) {MAPFORMHTTPMessageConverter mapFormHttPmessageConverter = newFormhttpMessageConverter ();););););););););););););) mapformhttpMessageConverter.addPartConverter (multipartFileHttpMessageConverter); return mapformhttpMessageConverter;}@beanpublic múltiplefilehttpmessageConverter multipartFileHttpMessageConverter () {return nuevo multipartfileHttpMessageConverter ();} Plan 2:
Uso de FeignSpringFormEncoder.java
En Spring, configúrelo de la siguiente manera:
@BeanPublic ENCODER FeignEncoder (ObjectFactory <httpMessageConverters> MessageConverters) {return New FeignSpringFormEncoder (MessageConverters);} Plan de uso recomendado 1
El plan 2 es para referencia https://github.com/pcan/feign-client-test, no probado
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.