In letzter Zeit fragen die Leute häufig Frühling Cloud vor vortäuschen, wie sie Dateien hochladen. Es gibt neue Mitglieder des Teams und Brüder aus anderen Unternehmen. Dieser Artikel fasst es kurz zusammen - -
In der frühen Frühlings -Cloud hatte VEIGN selbst nicht die Möglichkeit, Dateien (vor 1 Jahr) hochzuladen. Um dies zu erreichen, müssen Sie Encoder selbst schreiben, um Upload zu implementieren. Jetzt sind wir viel glücklicher. Weil der vorliegende Beamte das Unterprojekt vorlegt, was den zum Hochladen erforderlichen Encoder implementiert.
Hinweis: Die von mir getestete Version ist Edgware.Release. Camden und Dalston passen sich auch an die Beschreibung in diesem Artikel an.
Abhängigkeit hinzufügen
<Depopenty> <gruppe> io.github.openfesign.form </GroupId> <artifactId> Feign-Form </artifactId> <version> 3.0.3 </Version> </abhängig> <Depopentcy> <gruppe io.github.openfe.form </gruppactId> <artifactid> feign-form-for-pring </artifactId> <version> 3.0.3 </Version> </abhängig>
Schreiben von vorgetäuschender Kunden
@FeignClient (name = "ms-content sample", configuration = uploadFeignclient.multiPartSupportConfig.Class) Schnittstellen-Schnittstelle UploadFeignClient {@RequestMapping (value = "/upload", method = requestMethod.post, produziert = {Mediatype.Application_json_Utf8_value}, cesspes.Application_json_Utf8_value}, Verbraucher = Verbraucher = Verbrauchern = MediateType.multipart_form_data_value) @ResponseBody String handleFileUpload (@RequestPart (value = "Datei") MultiPartFile -Datei); Klasse MultipartSupportConfig {@Bean public cccoder FeignformeCoder () {return New SpringFirmalEncoder (); }}}Wie der Code zeigt, verweisen wir in diesem vorgetäuschenden Client auf die Konfigurationsklasse MultipartSupportConfig, und in MultipartSupportConfig haben wir SpringFormEncoder instanziiert. Auf diese Weise kann der vorgetäuschte Kunde hochgeladen werden.
Notiz
@RequestMapping (value = "/upload", method = requestMethod.post, produziert = {mediateType.application_json_utf8_value}, Consumer = mediatype.multiPart_form_data_value) dürfen nicht fehlt;Die Annotation @RequestPart (value = "file") in der Schnittstellendefinition kann nicht als @RequestParam (value = "Datei" geschrieben werden.
Es ist am besten, die Zeitüberschreitung von Hystrix etwas länger festzulegen, z. B. 5 Sekunden. Andernfalls kann Hystrix vor dem Hochladen der Datei ein Zeitabbruch haben, was zu einem Fehler auf der Client -Seite führt.
Die Fallstricke der Verwendung von Täuschung in Springcloud
Beispiele sind wie folgt:
@FeignClient ("service-resource") //@requestmapping ("/api/test") public interface testResourcEITG {@RequestMapping (value = "/api/test/raw", method = requestMethod.post, Consumers = "Application/x-wwwww-form-urlencoded") publicScoded ". @RequestParam ("Inhalt") String -Inhalt); // Inhalt} veranschaulichen:
* Verwenden Sie den Verbrauch in RequestMapping, um den Inhaltstyp der generierten Anforderung anzugeben
*Die von RequestParam angegebenen Parameter werden nach der URL gespleißt, wie z.
*PathVariable -Parameter werden an einen LinkedHasMap <String,?> In den vorgegebenen Encoder zur Verarbeitung gesendet. Der Encoder, der diese Schnittstelle im Frühjahr implementiert, ist Springcoder, und diese Implementierung verwendet den HTTPMessageConverter im Frühjahr, um das Anforderungskörper zu schreiben.
Grube:
*Verwenden Sie keine RequestMapping im Schnittstellenklassennamen. Obwohl es verwendet werden kann, öffnet SpringMVC die Instanz der Schnittstelle als Controller. Dies kann im Startup -Mapping -Protokoll angezeigt werden.
*Verwenden Sie den Standard -Springcoder, wenn der Konsum nicht angegeben ist, die Parameter in Pfadvariable erzeugen JSON -Zeichenfolgen, die zu senden sind, und die Formular -Form -Generierungsmethode wird standardmäßig nicht unterstützt. Der Grund dafür ist, dass FormHTTPMessageConverter nur MultivalUemap verarbeiten kann, während die Verwendung von pathVariablen Parametern in HashMap platziert wird. Das Datei -Upload wird standardmäßig nicht unterstützt. Tatsächlich gibt es bereits einen httpMessageConverter, der den Umgang mit verschiedenen Situationen unterstützt.
Füllen Sie die Grube aus:
*Einreichung von Support Formformular: Sie müssen nur einen formTtpMessageConverter schreiben, der die Karte unterstützt. Sie können die Methode von FormHTTPMessageConverter intern aufrufen, um den Vorgang zu vereinfachen.
*Support -Datei -Upload: In einer Ressource werden einfach die Datei zusammengeladen (die Ressource muss die Dateiname -Schnittstelle implementieren, die die Erkennung der Parsen der Anforderungsparameter in eine Datei ist) und verwenden Sie die StandardressourcehttpMessageConverter, um sie zu verarbeiten.
*Unterstützung für die Verarbeitung von Mehrfachfilmparametern: Schreiben Sie einfach ein MultipartFileHttpMessageConverter, das MultipartFile unterstützt. Sie können die Implementierung von ResourcehttpMessageConverter intern aufrufen. Beachten Sie gleichzeitig, dass es den Teilen von formHttpMessageConverter hinzugefügt werden muss und die GetFileName -Methode von formHTTPMessageConverter umschreibt, um das Erhalten des Dateinamens von MultipartFile zu unterstützen.
*Alle httpMessageConverter können direkt im @Bean -Modus generiert werden, und die Spring erkennt automatisch und fügt hinzu
Perfekte Unterstützung für Formular- und Datei -Upload:
Plan 1:
Verwenden Sie mapFormhttpMessageConverter.java und MultiPartFileHttpMessageConverter.java in Anhang
Machen Sie die folgende Konfiguration im Frühjahr
@BeanPublic mapFormhttpMessageConverter mapFormhttpMessArverter (MultiPartFileHttpMessageConverter multiPartFileHttpMessArverter) {mapFormHttpMessArverter mapFormHtttpMessageConverter = new mapformHtttpMesageConverter (); mapFormhttpMessageConverter.AddPartConverter (MultiPartFileHttpMessageConverter); return mapFormhttpMessageConverter;}@beanpublic MultiPartFileHttpMessArverter MultiPartFileHttpMessageConverter () {Return New MultipartFileHttpMessageConverter ();} Plan 2:
Verwenden von FeignspringformeCoder.java
Konfigurieren Sie es im Frühjahr wie folgt:
@BeanPublic Encoder FeigenCoder (ObjectFactory <httpMessageConverters> MessageConverters) {Neue FeignSpringforMEncoder (MessageConverters);};}; Empfohlener Nutzungsplan 1
Plan 2 ist als Referenz https://github.com/pcan/fesign-client-test, ungetestet
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.